not1mm 23.8.5__tar.gz → 23.8.6__tar.gz

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.
Files changed (142) hide show
  1. {not1mm-23.8.5 → not1mm-23.8.6}/PKG-INFO +11 -1
  2. {not1mm-23.8.5 → not1mm-23.8.6}/README.md +10 -0
  3. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/checkwindow.py +15 -2
  4. not1mm-23.8.6/not1mm/data/checkwindow.ui +103 -0
  5. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/database.py +37 -0
  6. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/version.py +1 -1
  7. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/PKG-INFO +11 -1
  8. {not1mm-23.8.5 → not1mm-23.8.6}/pyproject.toml +1 -1
  9. not1mm-23.8.5/not1mm/data/checkwindow.ui +0 -51
  10. {not1mm-23.8.5 → not1mm-23.8.6}/LICENSE +0 -0
  11. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/__init__.py +0 -0
  12. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/__main__.py +0 -0
  13. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/bandmap.py +0 -0
  14. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  15. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/MASTER.SCP +0 -0
  16. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/about.ui +0 -0
  17. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  18. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/bandmap.ui +0 -0
  19. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/check.png +0 -0
  20. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/configuration.ui +0 -0
  21. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/contests.sql +0 -0
  22. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/cty.json +0 -0
  23. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/cwmacros.txt +0 -0
  24. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/donors.html +0 -0
  25. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/editcontact.ui +0 -0
  26. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/editmacro.ui +0 -0
  27. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/greendot.png +0 -0
  28. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/k6gte-not1mm.desktop +0 -0
  29. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/k6gte.not1mm-128.png +0 -0
  30. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/k6gte.not1mm-32.png +0 -0
  31. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/k6gte.not1mm-64.png +0 -0
  32. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/logwindow.ui +0 -0
  33. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/main.ui +0 -0
  34. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/new_contest.ui +0 -0
  35. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/not1mm.html +0 -0
  36. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/opon.ui +0 -0
  37. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/0.wav +0 -0
  38. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/1.wav +0 -0
  39. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/2.wav +0 -0
  40. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/3.wav +0 -0
  41. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/4.wav +0 -0
  42. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/5.wav +0 -0
  43. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/6.wav +0 -0
  44. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/7.wav +0 -0
  45. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/73.wav +0 -0
  46. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/8.wav +0 -0
  47. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/9.wav +0 -0
  48. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/a.wav +0 -0
  49. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/again.wav +0 -0
  50. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/b.wav +0 -0
  51. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/c.wav +0 -0
  52. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/contest.wav +0 -0
  53. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/cq.wav +0 -0
  54. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/d.wav +0 -0
  55. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/e.wav +0 -0
  56. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/f.wav +0 -0
  57. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/g.wav +0 -0
  58. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/h.wav +0 -0
  59. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/i.wav +0 -0
  60. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/j.wav +0 -0
  61. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/k.wav +0 -0
  62. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/k6gte.wav +0 -0
  63. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/l.wav +0 -0
  64. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/m.wav +0 -0
  65. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/mynumber.wav +0 -0
  66. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/n.wav +0 -0
  67. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/nil.wav +0 -0
  68. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/o.wav +0 -0
  69. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/p.wav +0 -0
  70. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/q.wav +0 -0
  71. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/r.wav +0 -0
  72. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/roger.wav +0 -0
  73. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/s.wav +0 -0
  74. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/space.wav +0 -0
  75. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/t.wav +0 -0
  76. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/thankyou.wav +0 -0
  77. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  78. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/u.wav +0 -0
  79. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/v.wav +0 -0
  80. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/w.wav +0 -0
  81. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/x.wav +0 -0
  82. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/y.wav +0 -0
  83. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/yourcall.wav +0 -0
  84. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/phonetics/z.wav +0 -0
  85. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/pickcontest.ui +0 -0
  86. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/reddot.png +0 -0
  87. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/settings.ui +0 -0
  88. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/data/ssbmacros.txt +0 -0
  89. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/__init__.py +0 -0
  90. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/about.py +0 -0
  91. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/cat_interface.py +0 -0
  92. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/cwinterface.py +0 -0
  93. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/edit_contact.py +0 -0
  94. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/edit_macro.py +0 -0
  95. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/edit_opon.py +0 -0
  96. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/edit_station.py +0 -0
  97. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/ham_utility.py +0 -0
  98. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/lookup.py +0 -0
  99. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/multicast.py +0 -0
  100. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/n1mm.py +0 -0
  101. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/new_contest.py +0 -0
  102. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/select_contest.py +0 -0
  103. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/settings.py +0 -0
  104. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/super_check_partial.py +0 -0
  105. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/lib/versiontest.py +0 -0
  106. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/logwindow.py +0 -0
  107. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/10_10_fall_cw.py +0 -0
  108. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/10_10_spring_cw.py +0 -0
  109. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/10_10_summer_phone.py +0 -0
  110. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/10_10_winter_phone.py +0 -0
  111. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/__init__.py +0 -0
  112. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_dx_cw.py +0 -0
  113. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  114. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_field_day.py +0 -0
  115. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  116. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_ss_cw.py +0 -0
  117. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/arrl_ss_phone.py +0 -0
  118. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/canada_day.py +0 -0
  119. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/cq_wpx_cw.py +0 -0
  120. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  121. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/cq_ww_cw.py +0 -0
  122. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/cq_ww_ssb.py +0 -0
  123. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/cwt.py +0 -0
  124. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/general_logging.py +0 -0
  125. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/iaru_hf.py +0 -0
  126. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/jidx_cw.py +0 -0
  127. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/jidx_ph.py +0 -0
  128. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/naqp_cw.py +0 -0
  129. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/naqp_ssb.py +0 -0
  130. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/plugins/winter_field_day.py +0 -0
  131. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/testing/fakeflrig.py +0 -0
  132. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/testing/flrigclient.py +0 -0
  133. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/testing/multicast_listener.py +0 -0
  134. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/testing/n1mm_listener.py +0 -0
  135. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm/testing/test.py +0 -0
  136. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/SOURCES.txt +0 -0
  137. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/dependency_links.txt +0 -0
  138. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/entry_points.txt +0 -0
  139. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/requires.txt +0 -0
  140. {not1mm-23.8.5 → not1mm-23.8.6}/not1mm.egg-info/top_level.txt +0 -0
  141. {not1mm-23.8.5 → not1mm-23.8.6}/setup.cfg +0 -0
  142. {not1mm-23.8.5 → not1mm-23.8.6}/testing/test.py +0 -0
@@ -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
@@ -80,6 +80,7 @@ License-File: LICENSE
80
80
  - [Editing a contact](#editing-a-contact)
81
81
  - [Recalulate Mults](#recalulate-mults)
82
82
  - [Bandmap](#bandmap)
83
+ - [Check Window](#check-window)
83
84
  - [Cabrillo](#cabrillo)
84
85
  - [ADIF](#adif)
85
86
  - [Dupe checking](#dupe-checking)
@@ -141,6 +142,7 @@ I wish to thank those who've contributed to the project.
141
142
 
142
143
  ## Recent Changes
143
144
 
145
+ - [23-8-6] Add parsing of local log to check window.
144
146
  - [23-8-5] Add Check Window. Moved MASTER.SCP stuff to it's own class. Close sub windows when main app closes.
145
147
 
146
148
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -468,6 +470,14 @@ VFO indicator now displays as small triangle in the frequency tickmarks. A small
468
470
 
469
471
  Clicked on spots now tune the radio and set the callsign field. Previously worked calls are displayed in red.
470
472
 
473
+ ## Check Window
474
+
475
+ `Window`>`Check Window`
476
+
477
+ 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.
478
+
479
+ ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
480
+
471
481
  ## Cabrillo
472
482
 
473
483
  Click on `File` > `Generate Cabrillo`
@@ -61,6 +61,7 @@
61
61
  - [Editing a contact](#editing-a-contact)
62
62
  - [Recalulate Mults](#recalulate-mults)
63
63
  - [Bandmap](#bandmap)
64
+ - [Check Window](#check-window)
64
65
  - [Cabrillo](#cabrillo)
65
66
  - [ADIF](#adif)
66
67
  - [Dupe checking](#dupe-checking)
@@ -122,6 +123,7 @@ I wish to thank those who've contributed to the project.
122
123
 
123
124
  ## Recent Changes
124
125
 
126
+ - [23-8-6] Add parsing of local log to check window.
125
127
  - [23-8-5] Add Check Window. Moved MASTER.SCP stuff to it's own class. Close sub windows when main app closes.
126
128
 
127
129
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -449,6 +451,14 @@ VFO indicator now displays as small triangle in the frequency tickmarks. A small
449
451
 
450
452
  Clicked on spots now tune the radio and set the callsign field. Previously worked calls are displayed in red.
451
453
 
454
+ ## Check Window
455
+
456
+ `Window`>`Check Window`
457
+
458
+ 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.
459
+
460
+ ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
461
+
452
462
  ## Cabrillo
453
463
 
454
464
  Click on `File` > `Generate Cabrillo`
@@ -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
  """
@@ -0,0 +1,103 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>MainWindow</class>
4
+ <widget class="QMainWindow" name="MainWindow">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>310</width>
10
+ <height>600</height>
11
+ </rect>
12
+ </property>
13
+ <property name="font">
14
+ <font>
15
+ <family>JetBrains Mono</family>
16
+ <pointsize>14</pointsize>
17
+ </font>
18
+ </property>
19
+ <property name="windowTitle">
20
+ <string>CheckWindow</string>
21
+ </property>
22
+ <widget class="QWidget" name="centralwidget">
23
+ <layout class="QGridLayout" name="gridLayout">
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">
34
+ <widget class="QListWidget" name="logList"/>
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>
49
+ <item row="0" column="1">
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>
61
+ </item>
62
+ <item row="0" column="2">
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>
74
+ </item>
75
+ <item row="0" column="3">
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>
87
+ </item>
88
+ </layout>
89
+ </widget>
90
+ <widget class="QMenuBar" name="menubar">
91
+ <property name="geometry">
92
+ <rect>
93
+ <x>0</x>
94
+ <y>0</y>
95
+ <width>310</width>
96
+ <height>36</height>
97
+ </rect>
98
+ </property>
99
+ </widget>
100
+ </widget>
101
+ <resources/>
102
+ <connections/>
103
+ </ui>
@@ -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:
@@ -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
@@ -80,6 +80,7 @@ License-File: LICENSE
80
80
  - [Editing a contact](#editing-a-contact)
81
81
  - [Recalulate Mults](#recalulate-mults)
82
82
  - [Bandmap](#bandmap)
83
+ - [Check Window](#check-window)
83
84
  - [Cabrillo](#cabrillo)
84
85
  - [ADIF](#adif)
85
86
  - [Dupe checking](#dupe-checking)
@@ -141,6 +142,7 @@ I wish to thank those who've contributed to the project.
141
142
 
142
143
  ## Recent Changes
143
144
 
145
+ - [23-8-6] Add parsing of local log to check window.
144
146
  - [23-8-5] Add Check Window. Moved MASTER.SCP stuff to it's own class. Close sub windows when main app closes.
145
147
 
146
148
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -468,6 +470,14 @@ VFO indicator now displays as small triangle in the frequency tickmarks. A small
468
470
 
469
471
  Clicked on spots now tune the radio and set the callsign field. Previously worked calls are displayed in red.
470
472
 
473
+ ## Check Window
474
+
475
+ `Window`>`Check Window`
476
+
477
+ 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.
478
+
479
+ ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
480
+
471
481
  ## Cabrillo
472
482
 
473
483
  Click on `File` > `Generate Cabrillo`
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "23.8.5"
7
+ version = "23.8.6"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,51 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <ui version="4.0">
3
- <class>MainWindow</class>
4
- <widget class="QMainWindow" name="MainWindow">
5
- <property name="geometry">
6
- <rect>
7
- <x>0</x>
8
- <y>0</y>
9
- <width>310</width>
10
- <height>600</height>
11
- </rect>
12
- </property>
13
- <property name="font">
14
- <font>
15
- <family>JetBrains Mono</family>
16
- <pointsize>14</pointsize>
17
- </font>
18
- </property>
19
- <property name="windowTitle">
20
- <string>CheckWindow</string>
21
- </property>
22
- <widget class="QWidget" name="centralwidget">
23
- <layout class="QGridLayout" name="gridLayout">
24
- <item row="0" column="0">
25
- <widget class="QListWidget" name="logList"/>
26
- </item>
27
- <item row="0" column="1">
28
- <widget class="QListWidget" name="masterList"/>
29
- </item>
30
- <item row="0" column="2">
31
- <widget class="QListWidget" name="telnetList"/>
32
- </item>
33
- <item row="0" column="3">
34
- <widget class="QListWidget" name="callhistoryList"/>
35
- </item>
36
- </layout>
37
- </widget>
38
- <widget class="QMenuBar" name="menubar">
39
- <property name="geometry">
40
- <rect>
41
- <x>0</x>
42
- <y>0</y>
43
- <width>310</width>
44
- <height>36</height>
45
- </rect>
46
- </property>
47
- </widget>
48
- </widget>
49
- <resources/>
50
- <connections/>
51
- </ui>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes