not1mm 24.10.24.1__tar.gz → 24.10.26__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 (175) hide show
  1. {not1mm-24.10.24.1 → not1mm-24.10.26}/PKG-INFO +3 -1
  2. {not1mm-24.10.24.1 → not1mm-24.10.26}/README.md +2 -0
  3. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/__main__.py +9 -3
  4. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/bandmap.py +6 -1
  5. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/main.ui +23 -3
  6. not1mm-24.10.26/not1mm/lib/version.py +3 -0
  7. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/10_10_fall_cw.py +109 -82
  8. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/10_10_spring_cw.py +109 -82
  9. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/10_10_summer_phone.py +109 -82
  10. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/10_10_winter_phone.py +109 -82
  11. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_10m.py +109 -82
  12. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_dx_cw.py +109 -82
  13. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_dx_ssb.py +109 -82
  14. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_field_day.py +109 -82
  15. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_ss_cw.py +109 -82
  16. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_ss_phone.py +109 -82
  17. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_vhf_jan.py +109 -82
  18. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_vhf_jun.py +109 -82
  19. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_vhf_sep.py +109 -82
  20. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/canada_day.py +109 -82
  21. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_160_cw.py +109 -74
  22. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_160_ssb.py +109 -74
  23. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_wpx_cw.py +109 -82
  24. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_wpx_rtty.py +109 -82
  25. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_wpx_ssb.py +109 -82
  26. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_ww_cw.py +115 -83
  27. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_ww_rtty.py +110 -73
  28. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cq_ww_ssb.py +109 -82
  29. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/cwt.py +109 -82
  30. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/general_logging.py +1 -1
  31. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/helvetia.py +109 -82
  32. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/iaru_fieldday_r1_cw.py +109 -82
  33. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/iaru_fieldday_r1_ssb.py +109 -82
  34. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/iaru_hf.py +109 -82
  35. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/icwc_mst.py +109 -82
  36. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/jidx_cw.py +74 -48
  37. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/jidx_ph.py +74 -48
  38. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/k1usn_sst.py +109 -82
  39. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/naqp_cw.py +109 -82
  40. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/naqp_rtty.py +109 -82
  41. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/naqp_ssb.py +109 -82
  42. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/phone_weekly_test.py +109 -82
  43. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/ref_cw.py +109 -82
  44. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/ref_ssb.py +109 -82
  45. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/stew_perry_topband.py +109 -82
  46. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/weekly_rtty.py +109 -82
  47. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/winter_field_day.py +109 -82
  48. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/PKG-INFO +3 -1
  49. {not1mm-24.10.24.1 → not1mm-24.10.26}/pyproject.toml +1 -1
  50. not1mm-24.10.24.1/not1mm/lib/version.py +0 -3
  51. {not1mm-24.10.24.1 → not1mm-24.10.26}/LICENSE +0 -0
  52. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/__init__.py +0 -0
  53. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/checkwindow.py +0 -0
  54. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  55. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/MASTER.SCP +0 -0
  56. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/about.ui +0 -0
  57. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  58. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/bandmap.ui +0 -0
  59. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/check.png +0 -0
  60. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/checkwindow.ui +0 -0
  61. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/configuration.ui +0 -0
  62. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/contests.sql +0 -0
  63. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/cty.json +0 -0
  64. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/cwmacros.txt +0 -0
  65. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/donors.html +0 -0
  66. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/editcontact.ui +0 -0
  67. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/editmacro.ui +0 -0
  68. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/greendot.png +0 -0
  69. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/k6gte-not1mm.desktop +0 -0
  70. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/k6gte.not1mm-128.png +0 -0
  71. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/k6gte.not1mm-32.png +0 -0
  72. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/k6gte.not1mm-64.png +0 -0
  73. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/logwindow.ui +0 -0
  74. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/logwindowx.ui +0 -0
  75. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/new_contest.ui +0 -0
  76. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/not1mm.html +0 -0
  77. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/opon.ui +0 -0
  78. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/0.wav +0 -0
  79. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/1.wav +0 -0
  80. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/2.wav +0 -0
  81. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/3.wav +0 -0
  82. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/4.wav +0 -0
  83. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/5.wav +0 -0
  84. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/6.wav +0 -0
  85. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/7.wav +0 -0
  86. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/73.wav +0 -0
  87. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/8.wav +0 -0
  88. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/9.wav +0 -0
  89. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/a.wav +0 -0
  90. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/again.wav +0 -0
  91. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/b.wav +0 -0
  92. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/c.wav +0 -0
  93. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/contest.wav +0 -0
  94. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/cq.wav +0 -0
  95. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/cq2.wav +0 -0
  96. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/d.wav +0 -0
  97. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/e.wav +0 -0
  98. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/f.wav +0 -0
  99. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/g.wav +0 -0
  100. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/h.wav +0 -0
  101. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/i.wav +0 -0
  102. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/j.wav +0 -0
  103. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/k.wav +0 -0
  104. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/k6gte.wav +0 -0
  105. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/l.wav +0 -0
  106. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/m.wav +0 -0
  107. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/mynumber.wav +0 -0
  108. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/n.wav +0 -0
  109. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/nil.wav +0 -0
  110. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/o.wav +0 -0
  111. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/p.wav +0 -0
  112. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/q.wav +0 -0
  113. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/r.wav +0 -0
  114. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/roger.wav +0 -0
  115. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/s.wav +0 -0
  116. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/space.wav +0 -0
  117. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/t.wav +0 -0
  118. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/thankyou.wav +0 -0
  119. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  120. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/u.wav +0 -0
  121. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/v.wav +0 -0
  122. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/w.wav +0 -0
  123. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/x.wav +0 -0
  124. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/y.wav +0 -0
  125. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/yourcall.wav +0 -0
  126. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/phonetics/z.wav +0 -0
  127. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/pickcontest.ui +0 -0
  128. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/radio_green.png +0 -0
  129. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/radio_grey.png +0 -0
  130. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/radio_red.png +0 -0
  131. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/reddot.png +0 -0
  132. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/rttymacros.txt +0 -0
  133. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/settings.ui +0 -0
  134. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/splash.png +0 -0
  135. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/ssbmacros.txt +0 -0
  136. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/data/vfo.ui +0 -0
  137. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/fsutils.py +0 -0
  138. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/__init__.py +0 -0
  139. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/about.py +0 -0
  140. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/cat_interface.py +0 -0
  141. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/cwinterface.py +0 -0
  142. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/database.py +0 -0
  143. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/edit_contact.py +0 -0
  144. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/edit_macro.py +0 -0
  145. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/edit_opon.py +0 -0
  146. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/edit_station.py +0 -0
  147. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/fldigi_sendstring.py +0 -0
  148. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/fldigi_watcher.py +0 -0
  149. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/ft8_watcher.py +0 -0
  150. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/ham_utility.py +0 -0
  151. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/lookup.py +0 -0
  152. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/multicast.py +0 -0
  153. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/n1mm.py +0 -0
  154. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/new_contest.py +0 -0
  155. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/playsound.py +0 -0
  156. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/plugin_common.py +0 -0
  157. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/select_contest.py +0 -0
  158. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/settings.py +0 -0
  159. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/super_check_partial.py +0 -0
  160. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lib/versiontest.py +0 -0
  161. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/logwindow.py +0 -0
  162. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/lookupservice.py +0 -0
  163. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/__init__.py +0 -0
  164. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  165. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/radio.py +0 -0
  166. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/test.py +0 -0
  167. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/vfo.py +0 -0
  168. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm/voice_keying.py +0 -0
  169. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/SOURCES.txt +0 -0
  170. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/dependency_links.txt +0 -0
  171. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/entry_points.txt +0 -0
  172. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/requires.txt +0 -0
  173. {not1mm-24.10.24.1 → not1mm-24.10.26}/not1mm.egg-info/top_level.txt +0 -0
  174. {not1mm-24.10.24.1 → not1mm-24.10.26}/setup.cfg +0 -0
  175. {not1mm-24.10.24.1 → not1mm-24.10.26}/test/contests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.10.24.1
3
+ Version: 24.10.26
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
@@ -232,6 +232,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
232
232
 
233
233
  ## Recent Changes (Polishing the Turd)
234
234
 
235
+ - [24-10-26] Clear inputs when seeking to a call from the bandmap via the arrow up and down. Fixed bandmap crash from bad telnet data. Drop beacons from bandmap.
236
+ - [24-10-25] Add File Menu option to create either an ASCII or UTF8 Cabrillo.
235
237
  - [24-10-24-1] Make all Cabrillo files with UTF-8.
236
238
  - [24-10-24] Forgot to convert the VFO dockwidget along with the rest. CQ WW CW, Dupes now score 0.
237
239
  - [24-10-23] Remove duplicate marked calls in the bandmap.
@@ -201,6 +201,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
201
201
 
202
202
  ## Recent Changes (Polishing the Turd)
203
203
 
204
+ - [24-10-26] Clear inputs when seeking to a call from the bandmap via the arrow up and down. Fixed bandmap crash from bad telnet data. Drop beacons from bandmap.
205
+ - [24-10-25] Add File Menu option to create either an ASCII or UTF8 Cabrillo.
204
206
  - [24-10-24-1] Make all Cabrillo files with UTF-8.
205
207
  - [24-10-24] Forgot to convert the VFO dockwidget along with the rest. CQ WW CW, Dupes now score 0.
206
208
  - [24-10-23] Remove duplicate marked calls in the bandmap.
@@ -230,7 +230,12 @@ class MainWindow(QtWidgets.QMainWindow):
230
230
  self.actionVFO.triggered.connect(self.launch_vfo)
231
231
  self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
232
232
 
233
- self.actionGenerate_Cabrillo.triggered.connect(self.generate_cabrillo)
233
+ self.actionGenerate_Cabrillo_ASCII.triggered.connect(
234
+ lambda x: self.generate_cabrillo("ascii")
235
+ )
236
+ self.actionGenerate_Cabrillo_UTF8.triggered.connect(
237
+ lambda x: self.generate_cabrillo("utf-8")
238
+ )
234
239
  self.actionGenerate_ADIF.triggered.connect(self.generate_adif)
235
240
 
236
241
  self.actionConfiguration_Settings.triggered.connect(
@@ -746,6 +751,7 @@ class MainWindow(QtWidgets.QMainWindow):
746
751
  return
747
752
  if msg.get("cmd", "") == "TUNE":
748
753
  # b'{"cmd": "TUNE", "freq": 7.0235, "spot": "MM0DGI"}'
754
+ self.clearinputs()
749
755
  if self.vfo_window:
750
756
  self.vfo_window.msg_from_main(msg)
751
757
  vfo = msg.get("freq")
@@ -3629,7 +3635,7 @@ class MainWindow(QtWidgets.QMainWindow):
3629
3635
  logger.debug("******ADIF*****")
3630
3636
  self.contest.adif(self)
3631
3637
 
3632
- def generate_cabrillo(self) -> None:
3638
+ def generate_cabrillo(self, file_encoding: str) -> None:
3633
3639
  """
3634
3640
  Calls the contest Cabrillo file generator. Maybe.
3635
3641
 
@@ -3643,7 +3649,7 @@ class MainWindow(QtWidgets.QMainWindow):
3643
3649
  """
3644
3650
 
3645
3651
  logger.debug("******Cabrillo*****")
3646
- self.contest.cabrillo(self)
3652
+ self.contest.cabrillo(self, file_encoding)
3647
3653
 
3648
3654
 
3649
3655
  def load_fonts_from_dir(directory: str) -> set:
@@ -809,7 +809,10 @@ class BandMapWindow(QDockWidget):
809
809
  """Process waiting bytes"""
810
810
  while self.socket.bytesAvailable():
811
811
  data = self.socket.readLine(1000)
812
- data = str(data, "utf-8").strip()
812
+ try:
813
+ data = str(data, "utf-8").strip()
814
+ except UnicodeDecodeError:
815
+ continue
813
816
 
814
817
  if "login:" in data or "call:" in data or "callsign:" in data:
815
818
  self.send_command(self.callsignField.text())
@@ -819,6 +822,8 @@ class BandMapWindow(QDockWidget):
819
822
  "set dx mode " + self.settings.get("cluster_mode", "OPEN")
820
823
  )
821
824
  return
825
+ if "BEACON" in data:
826
+ return
822
827
  if "DX de" in data:
823
828
  parts = data.split()
824
829
  spotter = parts[2]
@@ -1471,7 +1471,8 @@
1471
1471
  <addaction name="actionStationSettings"/>
1472
1472
  <addaction name="separator"/>
1473
1473
  <addaction name="actionGenerate_ADIF"/>
1474
- <addaction name="actionGenerate_Cabrillo"/>
1474
+ <addaction name="actionGenerate_Cabrillo_ASCII"/>
1475
+ <addaction name="actionGenerate_Cabrillo_UTF8"/>
1475
1476
  <addaction name="separator"/>
1476
1477
  <addaction name="actionEdit_Macros"/>
1477
1478
  <addaction name="separator"/>
@@ -1684,9 +1685,28 @@
1684
1685
  <bool>false</bool>
1685
1686
  </property>
1686
1687
  </action>
1687
- <action name="actionGenerate_Cabrillo">
1688
+ <action name="actionGenerate_Cabrillo_ASCII">
1688
1689
  <property name="text">
1689
- <string>Generate Cabrillo</string>
1690
+ <string>Generate Cabrillo ASCII</string>
1691
+ </property>
1692
+ <property name="font">
1693
+ <font>
1694
+ <family>JetBrains Mono ExtraLight</family>
1695
+ </font>
1696
+ </property>
1697
+ <property name="autoRepeat">
1698
+ <bool>false</bool>
1699
+ </property>
1700
+ <property name="iconVisibleInMenu">
1701
+ <bool>false</bool>
1702
+ </property>
1703
+ <property name="shortcutVisibleInContextMenu">
1704
+ <bool>false</bool>
1705
+ </property>
1706
+ </action>
1707
+ <action name="actionGenerate_Cabrillo_UTF8">
1708
+ <property name="text">
1709
+ <string>Generate Cabrillo UTF-8</string>
1690
1710
  </property>
1691
1711
  <property name="font">
1692
1712
  <font>
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.10.26"
@@ -169,7 +169,16 @@ def adif(self):
169
169
  gen_adif(self, cabrillo_name)
170
170
 
171
171
 
172
- def cabrillo(self):
172
+ def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
173
+ """"""
174
+ print(
175
+ line_to_output.encode(file_encoding, errors="ignore").decode(),
176
+ end=ending,
177
+ file=file_descriptor,
178
+ )
179
+
180
+
181
+ def cabrillo(self, file_encoding):
173
182
  """Generates Cabrillo file. Maybe."""
174
183
  # https://www.cqwpx.com/cabrillo.htm
175
184
  logger.debug("******Cabrillo*****")
@@ -186,133 +195,150 @@ def cabrillo(self):
186
195
  log = self.database.fetch_all_contacts_asc()
187
196
  try:
188
197
  with open(filename, "w", encoding="utf-8") as file_descriptor:
189
- print("START-OF-LOG: 3.0", end="\r\n", file=file_descriptor)
190
- print(
198
+ output_cabrillo_line(
199
+ "START-OF-LOG: 3.0",
200
+ "\r\n",
201
+ file_descriptor,
202
+ file_encoding,
203
+ )
204
+ output_cabrillo_line(
191
205
  f"CREATED-BY: Not1MM v{__version__}",
192
- end="\r\n",
193
- file=file_descriptor,
206
+ "\r\n",
207
+ file_descriptor,
208
+ file_encoding,
194
209
  )
195
- print(
210
+ output_cabrillo_line(
196
211
  f"CONTEST: {cabrillo_name}",
197
- end="\r\n",
198
- file=file_descriptor,
212
+ "\r\n",
213
+ file_descriptor,
214
+ file_encoding,
199
215
  )
200
216
  if self.station.get("Club", ""):
201
- print(
217
+ output_cabrillo_line(
202
218
  f"CLUB: {self.station.get('Club', '').upper()}",
203
- end="\r\n",
204
- file=file_descriptor,
219
+ "\r\n",
220
+ file_descriptor,
221
+ file_encoding,
205
222
  )
206
- print(
223
+ output_cabrillo_line(
207
224
  f"CALLSIGN: {self.station.get('Call','')}",
208
- end="\r\n",
209
- file=file_descriptor,
225
+ "\r\n",
226
+ file_descriptor,
227
+ file_encoding,
210
228
  )
211
- print(
229
+ output_cabrillo_line(
212
230
  f"LOCATION: {self.station.get('ARRLSection', '')}",
213
- end="\r\n",
214
- file=file_descriptor,
231
+ "\r\n",
232
+ file_descriptor,
233
+ file_encoding,
215
234
  )
216
- # print(
217
- # f"ARRL-SECTION: {self.pref.get('section', '')}",
218
- # end="\r\n",
219
- # file=file_descriptor,
220
- # )
221
- print(
235
+ output_cabrillo_line(
222
236
  f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
223
- end="\r\n",
224
- file=file_descriptor,
237
+ "\r\n",
238
+ file_descriptor,
239
+ file_encoding,
225
240
  )
226
- print(
241
+ output_cabrillo_line(
227
242
  f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
228
- end="\r\n",
229
- file=file_descriptor,
243
+ "\r\n",
244
+ file_descriptor,
245
+ file_encoding,
230
246
  )
231
- print(
247
+ output_cabrillo_line(
232
248
  f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
233
- end="\r\n",
234
- file=file_descriptor,
249
+ "\r\n",
250
+ file_descriptor,
251
+ file_encoding,
235
252
  )
236
- print(
253
+ output_cabrillo_line(
237
254
  f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
238
- end="\r\n",
239
- file=file_descriptor,
255
+ "\r\n",
256
+ file_descriptor,
257
+ file_encoding,
240
258
  )
241
- print(
259
+ output_cabrillo_line(
242
260
  f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
243
- end="\r\n",
244
- file=file_descriptor,
261
+ "\r\n",
262
+ file_descriptor,
263
+ file_encoding,
245
264
  )
246
265
  if self.contest_settings.get("OverlayCategory", "") != "N/A":
247
- print(
266
+ output_cabrillo_line(
248
267
  f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
249
- end="\r\n",
250
- file=file_descriptor,
268
+ "\r\n",
269
+ file_descriptor,
270
+ file_encoding,
251
271
  )
252
- print(
272
+ output_cabrillo_line(
253
273
  f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
254
- end="\r\n",
255
- file=file_descriptor,
274
+ "\r\n",
275
+ file_descriptor,
276
+ file_encoding,
256
277
  )
257
- # print(
258
- # f"CATEGORY: {None}",
259
- # end="\r\n",
260
- # file=file_descriptor,
261
- # )
262
- print(
278
+ output_cabrillo_line(
263
279
  f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
264
- end="\r\n",
265
- file=file_descriptor,
280
+ "\r\n",
281
+ file_descriptor,
282
+ file_encoding,
266
283
  )
267
284
 
268
- print(
285
+ output_cabrillo_line(
269
286
  f"CLAIMED-SCORE: {calc_score(self)}",
270
- end="\r\n",
271
- file=file_descriptor,
287
+ "\r\n",
288
+ file_descriptor,
289
+ file_encoding,
272
290
  )
273
291
  ops = f"@{self.station.get('Call','')}"
274
292
  list_of_ops = self.database.get_ops()
275
293
  for op in list_of_ops:
276
294
  ops += f", {op.get('Operator', '')}"
277
- print(
295
+ output_cabrillo_line(
278
296
  f"OPERATORS: {ops}",
279
- end="\r\n",
280
- file=file_descriptor,
297
+ "\r\n",
298
+ file_descriptor,
299
+ file_encoding,
281
300
  )
282
- print(
301
+ output_cabrillo_line(
283
302
  f"NAME: {self.station.get('Name', '')}",
284
- end="\r\n",
285
- file=file_descriptor,
303
+ "\r\n",
304
+ file_descriptor,
305
+ file_encoding,
286
306
  )
287
- print(
307
+ output_cabrillo_line(
288
308
  f"ADDRESS: {self.station.get('Street1', '')}",
289
- end="\r\n",
290
- file=file_descriptor,
309
+ "\r\n",
310
+ file_descriptor,
311
+ file_encoding,
291
312
  )
292
- print(
313
+ output_cabrillo_line(
293
314
  f"ADDRESS-CITY: {self.station.get('City', '')}",
294
- end="\r\n",
295
- file=file_descriptor,
315
+ "\r\n",
316
+ file_descriptor,
317
+ file_encoding,
296
318
  )
297
- print(
319
+ output_cabrillo_line(
298
320
  f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
299
- end="\r\n",
300
- file=file_descriptor,
321
+ "\r\n",
322
+ file_descriptor,
323
+ file_encoding,
301
324
  )
302
- print(
325
+ output_cabrillo_line(
303
326
  f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
304
- end="\r\n",
305
- file=file_descriptor,
327
+ "\r\n",
328
+ file_descriptor,
329
+ file_encoding,
306
330
  )
307
- print(
331
+ output_cabrillo_line(
308
332
  f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
309
- end="\r\n",
310
- file=file_descriptor,
333
+ "\r\n",
334
+ file_descriptor,
335
+ file_encoding,
311
336
  )
312
- print(
337
+ output_cabrillo_line(
313
338
  f"EMAIL: {self.station.get('Email', '')}",
314
- end="\r\n",
315
- file=file_descriptor,
339
+ "\r\n",
340
+ file_descriptor,
341
+ file_encoding,
316
342
  )
317
343
  for contact in log:
318
344
  the_date_and_time = contact.get("TS", "")
@@ -323,7 +349,7 @@ def cabrillo(self):
323
349
 
324
350
  loggeddate = the_date_and_time[:10]
325
351
  loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
326
- print(
352
+ output_cabrillo_line(
327
353
  f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
328
354
  f"{contact.get('StationPrefix', '').ljust(13)} "
329
355
  f"{str(contact.get('SNT', '')).ljust(3)} "
@@ -331,10 +357,11 @@ def cabrillo(self):
331
357
  f"{contact.get('Call', '').ljust(13)} "
332
358
  f"{str(contact.get('RCV', '')).ljust(3)} "
333
359
  f"{str(contact.get('NR', '')).ljust(6)}",
334
- end="\r\n",
335
- file=file_descriptor,
360
+ "\r\n",
361
+ file_descriptor,
362
+ file_encoding,
336
363
  )
337
- print("END-OF-LOG:", end="\r\n", file=file_descriptor)
364
+ output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
338
365
  self.show_message_box(f"Cabrillo saved to: {filename}")
339
366
  except IOError as exception:
340
367
  logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)