not1mm 24.8.17.1__tar.gz → 24.8.27__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 (161) hide show
  1. {not1mm-24.8.17.1 → not1mm-24.8.27}/PKG-INFO +34 -4
  2. {not1mm-24.8.17.1 → not1mm-24.8.27}/README.md +33 -3
  3. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/__main__.py +16 -4
  4. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/new_contest.ui +11 -1
  5. not1mm-24.8.27/not1mm/data/splash.png +0 -0
  6. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/database.py +32 -1
  7. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/ham_utility.py +26 -0
  8. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/plugin_common.py +19 -12
  9. not1mm-24.8.27/not1mm/lib/version.py +3 -0
  10. not1mm-24.8.27/not1mm/plugins/helvetia.py +497 -0
  11. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/k1usn_sst.py +6 -6
  12. not1mm-24.8.17.1/not1mm/playsoundtest.py → not1mm-24.8.27/not1mm/test.py +3 -5
  13. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/PKG-INFO +34 -4
  14. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/SOURCES.txt +3 -1
  15. {not1mm-24.8.17.1 → not1mm-24.8.27}/pyproject.toml +1 -1
  16. not1mm-24.8.17.1/not1mm/lib/version.py +0 -3
  17. {not1mm-24.8.17.1 → not1mm-24.8.27}/LICENSE +0 -0
  18. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/__init__.py +0 -0
  19. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/bandmap.py +0 -0
  20. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/checkwindow.py +0 -0
  21. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  22. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/MASTER.SCP +0 -0
  23. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/about.ui +0 -0
  24. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  25. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/bandmap.ui +0 -0
  26. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/check.png +0 -0
  27. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/checkwindow.ui +0 -0
  28. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/configuration.ui +0 -0
  29. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/contests.sql +0 -0
  30. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/cty.json +0 -0
  31. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/cwmacros.txt +0 -0
  32. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/donors.html +0 -0
  33. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/editcontact.ui +0 -0
  34. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/editmacro.ui +0 -0
  35. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/greendot.png +0 -0
  36. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/k6gte-not1mm.desktop +0 -0
  37. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/k6gte.not1mm-128.png +0 -0
  38. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/k6gte.not1mm-32.png +0 -0
  39. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/k6gte.not1mm-64.png +0 -0
  40. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/logwindow.ui +0 -0
  41. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/logwindowx.ui +0 -0
  42. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/main.ui +0 -0
  43. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/not1mm.html +0 -0
  44. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/opon.ui +0 -0
  45. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/0.wav +0 -0
  46. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/1.wav +0 -0
  47. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/2.wav +0 -0
  48. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/3.wav +0 -0
  49. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/4.wav +0 -0
  50. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/5.wav +0 -0
  51. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/6.wav +0 -0
  52. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/7.wav +0 -0
  53. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/73.wav +0 -0
  54. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/8.wav +0 -0
  55. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/9.wav +0 -0
  56. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/a.wav +0 -0
  57. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/again.wav +0 -0
  58. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/b.wav +0 -0
  59. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/c.wav +0 -0
  60. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/contest.wav +0 -0
  61. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/cq.wav +0 -0
  62. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/d.wav +0 -0
  63. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/e.wav +0 -0
  64. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/f.wav +0 -0
  65. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/g.wav +0 -0
  66. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/h.wav +0 -0
  67. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/i.wav +0 -0
  68. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/j.wav +0 -0
  69. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/k.wav +0 -0
  70. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/k6gte.wav +0 -0
  71. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/l.wav +0 -0
  72. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/m.wav +0 -0
  73. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/mynumber.wav +0 -0
  74. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/n.wav +0 -0
  75. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/nil.wav +0 -0
  76. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/o.wav +0 -0
  77. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/p.wav +0 -0
  78. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/q.wav +0 -0
  79. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/r.wav +0 -0
  80. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/roger.wav +0 -0
  81. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/s.wav +0 -0
  82. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/space.wav +0 -0
  83. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/t.wav +0 -0
  84. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/thankyou.wav +0 -0
  85. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  86. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/u.wav +0 -0
  87. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/v.wav +0 -0
  88. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/w.wav +0 -0
  89. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/x.wav +0 -0
  90. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/y.wav +0 -0
  91. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/yourcall.wav +0 -0
  92. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/phonetics/z.wav +0 -0
  93. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/pickcontest.ui +0 -0
  94. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/radio_green.png +0 -0
  95. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/radio_grey.png +0 -0
  96. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/radio_red.png +0 -0
  97. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/reddot.png +0 -0
  98. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/settings.ui +0 -0
  99. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/ssbmacros.txt +0 -0
  100. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/data/vfo.ui +0 -0
  101. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/fsutils.py +0 -0
  102. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/__init__.py +0 -0
  103. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/about.py +0 -0
  104. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/cat_interface.py +0 -0
  105. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/cwinterface.py +0 -0
  106. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/edit_contact.py +0 -0
  107. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/edit_macro.py +0 -0
  108. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/edit_opon.py +0 -0
  109. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/edit_station.py +0 -0
  110. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/ft8_watcher.py +0 -0
  111. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/lookup.py +0 -0
  112. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/multicast.py +0 -0
  113. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/n1mm.py +0 -0
  114. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/new_contest.py +0 -0
  115. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/playsound.py +0 -0
  116. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/select_contest.py +0 -0
  117. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/settings.py +0 -0
  118. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/super_check_partial.py +0 -0
  119. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/lib/versiontest.py +0 -0
  120. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/logwindow.py +0 -0
  121. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/10_10_fall_cw.py +0 -0
  122. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/10_10_spring_cw.py +0 -0
  123. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/10_10_summer_phone.py +0 -0
  124. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/10_10_winter_phone.py +0 -0
  125. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/__init__.py +0 -0
  126. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_10m.py +0 -0
  127. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_dx_cw.py +0 -0
  128. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  129. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_field_day.py +0 -0
  130. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  131. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_ss_cw.py +0 -0
  132. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_ss_phone.py +0 -0
  133. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  134. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  135. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  136. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/canada_day.py +0 -0
  137. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_160_cw.py +0 -0
  138. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_160_ssb.py +0 -0
  139. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_wpx_cw.py +0 -0
  140. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  141. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_ww_cw.py +0 -0
  142. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cq_ww_ssb.py +0 -0
  143. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/cwt.py +0 -0
  144. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/general_logging.py +0 -0
  145. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/iaru_hf.py +0 -0
  146. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/icwc_mst.py +0 -0
  147. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/jidx_cw.py +0 -0
  148. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/jidx_ph.py +0 -0
  149. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/naqp_cw.py +0 -0
  150. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/naqp_ssb.py +0 -0
  151. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/phone_weekly_test.py +0 -0
  152. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/stew_perry_topband.py +0 -0
  153. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/plugins/winter_field_day.py +0 -0
  154. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/radio.py +0 -0
  155. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/vfo.py +0 -0
  156. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm/voice_keying.py +0 -0
  157. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/dependency_links.txt +0 -0
  158. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/entry_points.txt +0 -0
  159. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/requires.txt +0 -0
  160. {not1mm-24.8.17.1 → not1mm-24.8.27}/not1mm.egg-info/top_level.txt +0 -0
  161. {not1mm-24.8.17.1 → not1mm-24.8.27}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.8.17.1
3
+ Version: 24.8.27
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
@@ -69,6 +69,7 @@ Requires-Dist: Levenshtein
69
69
  - [Fedora 38 \& 39](#fedora-38--39)
70
70
  - [Fedora 40](#fedora-40)
71
71
  - [Manjaro](#manjaro)
72
+ - [Mint](#mint)
72
73
  - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
73
74
  - [Bootstrapping pipx](#bootstrapping-pipx)
74
75
  - [Installing with pipx](#installing-with-pipx)
@@ -209,10 +210,12 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
209
210
  - CQ World Wide CW
210
211
  - CQ World Wide SSB
211
212
  - CWOps CWT
213
+ - Helvetia
212
214
  - IARU HF
213
215
  - ICWC MST
214
216
  - Japan International DX CW
215
217
  - Japan International DX SSB
218
+ - K1USN Slow Speed Test
216
219
  - NAQP CW
217
220
  - NAQP SSB
218
221
  - Phone Weekly Test
@@ -222,6 +225,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
222
225
 
223
226
  ## Recent Changes
224
227
 
228
+ - [24-8-27] Added Helvetia contest.
229
+ - [24-8-22] Add loading splash screen.
230
+ - [24-8-20] Added K1USN Slow Speed Test
225
231
  - [24-8-17-1] Did an oops. Fixed the oops.
226
232
  - [24-8-17] Removed some cruft. Made dockable widgets not floatable since Wayland breaks this.
227
233
 
@@ -238,8 +244,14 @@ clue me into the black magic needed to get it to work.
238
244
 
239
245
  ### Prerequisites
240
246
 
241
- not1mm requires Python 3.9+, PyQt6 and libportaudio2. You should install these
242
- through your distribution's package manager before continuing.
247
+ not1mm requires:
248
+
249
+ - Python 3.9+
250
+ - PyQt6
251
+ - libportaudio2
252
+ - libxcb-cursor0 (maybe... Depends on the distro)
253
+
254
+ You should install these through your distribution's package manager before continuing.
243
255
 
244
256
  ### Common installation recipes for Ubuntu and Fedora
245
257
 
@@ -316,6 +328,22 @@ pip install not1mm
316
328
  pamac build not1mm-git
317
329
  ```
318
330
 
331
+ </details>
332
+
333
+ <details>
334
+
335
+ <summary><b>Mint 22</b></summary>
336
+
337
+ #### Mint
338
+
339
+ ```bash
340
+ sudo apt install python3-pip
341
+ sudo apt install pipx
342
+ sudo apt install libxcb-cursor0
343
+ pipx install not1mm
344
+ pipx ensurepath
345
+ ```
346
+
319
347
  </details>
320
348
  <br>
321
349
 
@@ -427,7 +455,9 @@ qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it
427
455
  This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
428
456
  ```
429
457
 
430
- To avoid this you can export an environment variable and launch the app like this:
458
+ You can use your package manager to load libxcb-cursor0.
459
+
460
+ If that's not an option, you can export an environment variable and launch the app like this:
431
461
 
432
462
  `mbridak@vm:~$ export QT_QPA_PLATFORM=wayland; not1mm`
433
463
 
@@ -38,6 +38,7 @@
38
38
  - [Fedora 38 \& 39](#fedora-38--39)
39
39
  - [Fedora 40](#fedora-40)
40
40
  - [Manjaro](#manjaro)
41
+ - [Mint](#mint)
41
42
  - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
42
43
  - [Bootstrapping pipx](#bootstrapping-pipx)
43
44
  - [Installing with pipx](#installing-with-pipx)
@@ -178,10 +179,12 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
178
179
  - CQ World Wide CW
179
180
  - CQ World Wide SSB
180
181
  - CWOps CWT
182
+ - Helvetia
181
183
  - IARU HF
182
184
  - ICWC MST
183
185
  - Japan International DX CW
184
186
  - Japan International DX SSB
187
+ - K1USN Slow Speed Test
185
188
  - NAQP CW
186
189
  - NAQP SSB
187
190
  - Phone Weekly Test
@@ -191,6 +194,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
191
194
 
192
195
  ## Recent Changes
193
196
 
197
+ - [24-8-27] Added Helvetia contest.
198
+ - [24-8-22] Add loading splash screen.
199
+ - [24-8-20] Added K1USN Slow Speed Test
194
200
  - [24-8-17-1] Did an oops. Fixed the oops.
195
201
  - [24-8-17] Removed some cruft. Made dockable widgets not floatable since Wayland breaks this.
196
202
 
@@ -207,8 +213,14 @@ clue me into the black magic needed to get it to work.
207
213
 
208
214
  ### Prerequisites
209
215
 
210
- not1mm requires Python 3.9+, PyQt6 and libportaudio2. You should install these
211
- through your distribution's package manager before continuing.
216
+ not1mm requires:
217
+
218
+ - Python 3.9+
219
+ - PyQt6
220
+ - libportaudio2
221
+ - libxcb-cursor0 (maybe... Depends on the distro)
222
+
223
+ You should install these through your distribution's package manager before continuing.
212
224
 
213
225
  ### Common installation recipes for Ubuntu and Fedora
214
226
 
@@ -285,6 +297,22 @@ pip install not1mm
285
297
  pamac build not1mm-git
286
298
  ```
287
299
 
300
+ </details>
301
+
302
+ <details>
303
+
304
+ <summary><b>Mint 22</b></summary>
305
+
306
+ #### Mint
307
+
308
+ ```bash
309
+ sudo apt install python3-pip
310
+ sudo apt install pipx
311
+ sudo apt install libxcb-cursor0
312
+ pipx install not1mm
313
+ pipx ensurepath
314
+ ```
315
+
288
316
  </details>
289
317
  <br>
290
318
 
@@ -396,7 +424,9 @@ qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it
396
424
  This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
397
425
  ```
398
426
 
399
- To avoid this you can export an environment variable and launch the app like this:
427
+ You can use your package manager to load libxcb-cursor0.
428
+
429
+ If that's not an option, you can export an environment variable and launch the app like this:
400
430
 
401
431
  `mbridak@vm:~$ export QT_QPA_PLATFORM=wayland; not1mm`
402
432
 
@@ -35,9 +35,9 @@ except OSError as exception:
35
35
  print("portaudio is not installed")
36
36
  sd = None
37
37
  from PyQt6 import QtCore, QtGui, QtWidgets, uic
38
- from PyQt6.QtCore import QDir, Qt, QThread, QSettings
39
- from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor
40
- from PyQt6.QtWidgets import QFileDialog
38
+ from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
39
+ from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
40
+ from PyQt6.QtWidgets import QFileDialog, QSplashScreen
41
41
 
42
42
  from not1mm.lib.about import About
43
43
  from not1mm.lib.cwinterface import CW
@@ -3398,12 +3398,24 @@ logging.basicConfig(
3398
3398
  logging.getLogger("PyQt6.uic.uiparser").setLevel("INFO")
3399
3399
  logging.getLogger("PyQt6.uic.properties").setLevel("INFO")
3400
3400
  app = QtWidgets.QApplication(sys.argv)
3401
+
3402
+ pixmap = QPixmap(f"{os.fspath(fsutils.APP_DATA_PATH)}/splash.png")
3403
+ splash = QSplashScreen(pixmap)
3404
+ splash.show()
3405
+ app.processEvents()
3406
+ splash.showMessage(
3407
+ "Starting Up",
3408
+ alignment=Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignCenter,
3409
+ color=QColor(255, 255, 0),
3410
+ )
3411
+ QCoreApplication.processEvents()
3412
+
3401
3413
  families = load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
3402
3414
  logger.info(f"font families {families}")
3403
3415
  window = MainWindow()
3404
3416
  window.callsign.setFocus()
3405
3417
  window.show()
3406
-
3418
+ splash.finish(window)
3407
3419
 
3408
3420
  if __name__ == "__main__":
3409
3421
  run()
@@ -297,6 +297,11 @@
297
297
  <string>CWT</string>
298
298
  </property>
299
299
  </item>
300
+ <item>
301
+ <property name="text">
302
+ <string>HELVETIA</string>
303
+ </property>
304
+ </item>
300
305
  <item>
301
306
  <property name="text">
302
307
  <string>ICWC MST</string>
@@ -317,6 +322,11 @@
317
322
  <string>JIDX PH</string>
318
323
  </property>
319
324
  </item>
325
+ <item>
326
+ <property name="text">
327
+ <string>K1USN SST</string>
328
+ </property>
329
+ </item>
320
330
  <item>
321
331
  <property name="text">
322
332
  <string>NAQP CW</string>
@@ -351,7 +361,7 @@
351
361
  </property>
352
362
  <property name="time">
353
363
  <time>
354
- <hour>16</hour>
364
+ <hour>0</hour>
355
365
  <minute>0</minute>
356
366
  <second>0</second>
357
367
  </time>
Binary file
@@ -567,7 +567,7 @@ class DataBase:
567
567
  def fetch_country_band_count(self) -> dict:
568
568
  """
569
569
  returns dict with count of unique NR.
570
- {nr_count: count}
570
+ {cb_count: count}
571
571
  """
572
572
  try:
573
573
  with sqlite3.connect(self.database) as conn:
@@ -581,6 +581,23 @@ class DataBase:
581
581
  logger.debug("%s", exception)
582
582
  return {}
583
583
 
584
+ def fetch_country_count(self) -> dict:
585
+ """
586
+ Fetch count of unique countries
587
+ {dxcc_count: count}
588
+ """
589
+ try:
590
+ with sqlite3.connect(self.database) as conn:
591
+ conn.row_factory = self.row_factory
592
+ cursor = conn.cursor()
593
+ cursor.execute(
594
+ f"select count(DISTINCT(CountryPrefix)) as dxcc_count from dxlog where ContestNR = {self.current_contest};"
595
+ )
596
+ return cursor.fetchone()
597
+ except sqlite3.OperationalError as exception:
598
+ logger.debug("%s", exception)
599
+ return {}
600
+
584
601
  def fetch_arrldx_country_band_count(self) -> dict:
585
602
  """
586
603
  returns dict with count of unique NR.
@@ -883,6 +900,20 @@ class DataBase:
883
900
  logger.debug("%s", exception)
884
901
  return {}
885
902
 
903
+ def fetch_mult2_count(self) -> dict:
904
+ """return QSO count"""
905
+ try:
906
+ with sqlite3.connect(self.database) as conn:
907
+ conn.row_factory = self.row_factory
908
+ cursor = conn.cursor()
909
+ cursor.execute(
910
+ f"select count(*) as count from dxlog where IsMultiplier2 = 1 and ContestNR = {self.current_contest};"
911
+ )
912
+ return cursor.fetchone()
913
+ except sqlite3.OperationalError as exception:
914
+ logger.debug("%s", exception)
915
+ return {}
916
+
886
917
  def fetch_qso_count(self) -> dict:
887
918
  """return QSO count"""
888
919
  try:
@@ -373,3 +373,29 @@ def distance_with_latlon(grid1: str, lat2: float, lon2: float) -> float:
373
373
  logger.debug("lat1:%d lon1:%d lat2:%d lon2:%d", lat1, lon1, lat2, lon2)
374
374
  # lat2, lon2 = gridtolatlon(grid2)
375
375
  return round(haversine(lon1, lat1, lon2, lat2))
376
+
377
+
378
+ def parse_udc(filename: str) -> dict:
379
+ """
380
+ simply parses a n1mm style udc file and returns a dict with key value pairs.
381
+ """
382
+
383
+ udc_contest = {}
384
+ the_good_stuff = False
385
+
386
+ try:
387
+ with open(filename, "r", encoding="utf-8") as file_descriptor:
388
+ for line in file_descriptor:
389
+ if "[CONTEST]" in line.upper():
390
+ the_good_stuff = True
391
+ continue
392
+ if "=" in line and the_good_stuff is True:
393
+ try:
394
+ key, value = line.split("=")
395
+ udc_contest[key.strip()] = value.strip()
396
+ except ValueError:
397
+ ...
398
+ except FileNotFoundError:
399
+ logger.debug("UDC file not found.")
400
+ return {}
401
+ return udc_contest
@@ -158,7 +158,9 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
158
158
  except TypeError:
159
159
  ...
160
160
 
161
+ # SRX STRING, Contest dependent
161
162
  try:
163
+ # ----------Field Days------------
162
164
  if cabrillo_name in ("WFD", "ARRL-FD"):
163
165
  rcv = (
164
166
  f"{contact.get('Exchange1', '')} {contact.get('Sect', '')}"
@@ -169,18 +171,8 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
169
171
  end="\r\n",
170
172
  file=file_descriptor,
171
173
  )
172
- elif rcvnr != "0":
173
- print(
174
- f"<SRX_STRING:{len(rcvnr)}>{rcvnr}",
175
- end="\r\n",
176
- file=file_descriptor,
177
- )
178
- except TypeError:
179
- ...
180
-
181
- # cabrillo_name = "CQ-160-CW"
182
- try:
183
- if cabrillo_name in ("CQ-160-CW", "CQ-160-SSB"):
174
+ # ------------CQ 160---------------
175
+ elif cabrillo_name in ("CQ-160-CW", "CQ-160-SSB"):
184
176
  rcv = f"{contact.get('Exchange1', '')}"
185
177
  if len(rcv) > 1:
186
178
  print(
@@ -188,6 +180,21 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
188
180
  end="\r\n",
189
181
  file=file_descriptor,
190
182
  )
183
+ # --------------K1USN-SST-----------
184
+ elif cabrillo_name == "K1USN-SST":
185
+ rcv = f"{contact.get('Name', '')} {contact.get('Sect', '')}"
186
+ if len(rcv) > 1:
187
+ print(
188
+ f"<SRX_STRING:{len(rcv)}>{rcv.upper()}",
189
+ end="\r\n",
190
+ file=file_descriptor,
191
+ )
192
+ elif rcvnr != "0":
193
+ print(
194
+ f"<SRX_STRING:{len(rcvnr)}>{rcvnr}",
195
+ end="\r\n",
196
+ file=file_descriptor,
197
+ )
191
198
  except TypeError:
192
199
  ...
193
200
 
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.8.27"