not1mm 25.5.14__tar.gz → 25.5.22__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 (194) hide show
  1. {not1mm-25.5.14 → not1mm-25.5.22}/PKG-INFO +39 -2
  2. {not1mm-25.5.14 → not1mm-25.5.22}/README.md +38 -1
  3. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/__main__.py +76 -26
  4. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/bandmap.py +5 -1
  5. not1mm-25.5.22/not1mm/data/JetBrainsMono-Thin.ttf +0 -0
  6. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/about.ui +1 -1
  7. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/bandmap.ui +4 -4
  8. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/checkwindow.ui +7 -7
  9. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/configuration.ui +55 -55
  10. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/editcontact.ui +3 -3
  11. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/editmacro.ui +1 -1
  12. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/logwindow.ui +2 -2
  13. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/logwindowx.ui +2 -2
  14. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/main.ui +36 -36
  15. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/new_contest.ui +2 -2
  16. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/opon.ui +1 -1
  17. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/pickcontest.ui +1 -1
  18. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/ratewindow.ui +2 -2
  19. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/settings.ui +1 -1
  20. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/statistics.ui +1 -1
  21. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/vfo.ui +2 -2
  22. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/settings.py +7 -2
  23. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/version.py +1 -1
  24. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/PKG-INFO +39 -2
  25. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/SOURCES.txt +1 -1
  26. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/top_level.txt +1 -0
  27. {not1mm-25.5.14 → not1mm-25.5.22}/pyproject.toml +1 -1
  28. not1mm-25.5.14/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  29. {not1mm-25.5.14 → not1mm-25.5.22}/LICENSE +0 -0
  30. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/__init__.py +0 -0
  31. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/checkwindow.py +0 -0
  32. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/MASTER.SCP +0 -0
  33. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  34. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/check.png +0 -0
  35. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/contests.sql +0 -0
  36. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/cty.json +0 -0
  37. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/cwmacros.txt +0 -0
  38. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/donors.html +0 -0
  39. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/greendot.png +0 -0
  40. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/k6gte-not1mm.desktop +0 -0
  41. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/k6gte.not1mm-128.png +0 -0
  42. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/k6gte.not1mm-32.png +0 -0
  43. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/k6gte.not1mm-64.png +0 -0
  44. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/not1mm.html +0 -0
  45. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/0.wav +0 -0
  46. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/1.wav +0 -0
  47. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/2.wav +0 -0
  48. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/3.wav +0 -0
  49. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/4.wav +0 -0
  50. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/5.wav +0 -0
  51. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/6.wav +0 -0
  52. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/7.wav +0 -0
  53. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/73.wav +0 -0
  54. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/8.wav +0 -0
  55. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/9.wav +0 -0
  56. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/a.wav +0 -0
  57. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/again.wav +0 -0
  58. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/b.wav +0 -0
  59. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/c.wav +0 -0
  60. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/contest.wav +0 -0
  61. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/cq.wav +0 -0
  62. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/cq2.wav +0 -0
  63. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/d.wav +0 -0
  64. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/e.wav +0 -0
  65. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/f.wav +0 -0
  66. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/g.wav +0 -0
  67. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/h.wav +0 -0
  68. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/i.wav +0 -0
  69. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/j.wav +0 -0
  70. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/k.wav +0 -0
  71. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/k6gte.wav +0 -0
  72. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/l.wav +0 -0
  73. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/m.wav +0 -0
  74. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/mynumber.wav +0 -0
  75. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/n.wav +0 -0
  76. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/nil.wav +0 -0
  77. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/o.wav +0 -0
  78. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/p.wav +0 -0
  79. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/q.wav +0 -0
  80. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/r.wav +0 -0
  81. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/roger.wav +0 -0
  82. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/s.wav +0 -0
  83. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/space.wav +0 -0
  84. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/t.wav +0 -0
  85. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/thankyou.wav +0 -0
  86. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  87. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/u.wav +0 -0
  88. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/v.wav +0 -0
  89. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/w.wav +0 -0
  90. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/x.wav +0 -0
  91. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/y.wav +0 -0
  92. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/yourcall.wav +0 -0
  93. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/phonetics/z.wav +0 -0
  94. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/radio_green.png +0 -0
  95. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/radio_grey.png +0 -0
  96. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/radio_red.png +0 -0
  97. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/reddot.png +0 -0
  98. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/rttymacros.txt +0 -0
  99. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/splash.png +0 -0
  100. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/data/ssbmacros.txt +0 -0
  101. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/fsutils.py +0 -0
  102. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/__init__.py +0 -0
  103. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/about.py +0 -0
  104. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/cat_interface.py +0 -0
  105. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/cwinterface.py +0 -0
  106. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/database.py +0 -0
  107. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/edit_contact.py +0 -0
  108. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/edit_macro.py +0 -0
  109. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/edit_opon.py +0 -0
  110. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/edit_station.py +0 -0
  111. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/fldigi_sendstring.py +0 -0
  112. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/ft8_watcher.py +0 -0
  113. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/ham_utility.py +0 -0
  114. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/lookup.py +0 -0
  115. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/multicast.py +0 -0
  116. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/n1mm.py +0 -0
  117. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/new_contest.py +0 -0
  118. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/plugin_common.py +0 -0
  119. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/select_contest.py +0 -0
  120. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/super_check_partial.py +0 -0
  121. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lib/versiontest.py +0 -0
  122. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/logwindow.py +0 -0
  123. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/lookupservice.py +0 -0
  124. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/10_10_fall_cw.py +0 -0
  125. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/10_10_spring_cw.py +0 -0
  126. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/10_10_summer_phone.py +0 -0
  127. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/10_10_winter_phone.py +0 -0
  128. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/__init__.py +0 -0
  129. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ari_40_80.py +0 -0
  130. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_10m.py +0 -0
  131. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_160m.py +0 -0
  132. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_dx_cw.py +0 -0
  133. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  134. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_field_day.py +0 -0
  135. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  136. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_ss_cw.py +0 -0
  137. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_ss_phone.py +0 -0
  138. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  139. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  140. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  141. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/canada_day.py +0 -0
  142. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_160_cw.py +0 -0
  143. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_160_ssb.py +0 -0
  144. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_wpx_cw.py +0 -0
  145. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  146. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  147. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_ww_cw.py +0 -0
  148. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_ww_rtty.py +0 -0
  149. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cq_ww_ssb.py +0 -0
  150. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/cwt.py +0 -0
  151. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/darc_vhf.py +0 -0
  152. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/darc_xmas.py +0 -0
  153. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ea_majistad_cw.py +0 -0
  154. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ea_majistad_ssb.py +0 -0
  155. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ea_rtty.py +0 -0
  156. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/es_open.py +0 -0
  157. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/general_logging.py +0 -0
  158. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/helvetia.py +0 -0
  159. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  160. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  161. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/iaru_hf.py +0 -0
  162. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/icwc_mst.py +0 -0
  163. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/jidx_cw.py +0 -0
  164. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/jidx_ph.py +0 -0
  165. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/k1usn_sst.py +0 -0
  166. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/labre_rs_digi.py +0 -0
  167. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/lz-dx.py +0 -0
  168. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/naqp_cw.py +0 -0
  169. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/naqp_rtty.py +0 -0
  170. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/naqp_ssb.py +0 -0
  171. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/phone_weekly_test.py +0 -0
  172. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/raem.py +0 -0
  173. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/randomgram.py +0 -0
  174. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ref_cw.py +0 -0
  175. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ref_ssb.py +0 -0
  176. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/sac_cw.py +0 -0
  177. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/sac_ssb.py +0 -0
  178. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/spdx.py +0 -0
  179. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/stew_perry_topband.py +0 -0
  180. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/ukeidx.py +0 -0
  181. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/vhf_sprint.py +0 -0
  182. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/weekly_rtty.py +0 -0
  183. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/plugins/winter_field_day.py +0 -0
  184. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/radio.py +0 -0
  185. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/ratewindow.py +0 -0
  186. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/rtc_service.py +0 -0
  187. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/statistics.py +0 -0
  188. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/test.py +0 -0
  189. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/vfo.py +0 -0
  190. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm/voice_keying.py +0 -0
  191. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/dependency_links.txt +0 -0
  192. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/entry_points.txt +0 -0
  193. {not1mm-25.5.14 → not1mm-25.5.22}/not1mm.egg-info/requires.txt +0 -0
  194. {not1mm-25.5.14 → not1mm-25.5.22}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.5.14
3
+ Version: 25.5.22
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -62,6 +62,7 @@ Dynamic: license-file
62
62
  - [Flatpak](#flatpak)
63
63
  - [Installation](#installation)
64
64
  - [Prerequisites](#prerequisites)
65
+ - [The Easy and Fast way to always run the latest version](#the-easy-and-fast-way-to-always-run-the-latest-version)
65
66
  - [Common Installation Recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
66
67
  - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
67
68
  - [Ubuntu 23.04](#ubuntu-2304)
@@ -256,6 +257,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
256
257
 
257
258
  ## Recent Changes
258
259
 
260
+ - [25-5-22] Trap possible ValueError exception in settings.py
261
+ -[25-5-21] Fix crash from unsafe dict key access when processing F1-F12.
259
262
  - [25-5-6] Merged PR from @JG3LLB, Koji-Kawano, Adding code to stop sending morse if using rigctld to send, and @alduhoo adding more control to CW serial number padding.
260
263
 
261
264
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -280,6 +283,40 @@ Not1MM requires:
280
283
 
281
284
  You should install these through your distribution's package manager before continuing.
282
285
 
286
+ ### The Easy and Fast way to always run the latest version
287
+
288
+ - Step 1. Visit [Astral](https://docs.astral.sh/uv/) and install uv.
289
+
290
+ In short you run this in your terminal:
291
+
292
+ ```bash
293
+ curl -LsSf https://astral.sh/uv/install.sh | sh
294
+ ```
295
+
296
+ - Step 2. Tell it to run not1mm:
297
+
298
+ ```bash
299
+ uv tool run not1mm
300
+ ```
301
+
302
+ That's it... It will go out, fetch the latest version of not1mm, setup a python virtual environment, get all the needed python libraries, cache everything and run not1mm. The first time takes a minute, but each time after, it's lightning quick and it will automatically check for updates and run the latest version.
303
+
304
+ But wait... There's more. If your distro is old and you're stuck with an older version of python... Say 3.10. And you want to see what all the cool kids are using. But you don't want to corrupt your broke ol' system by downloading the newest Python version. No problem. You can tell uv to run not1mm with any version of Python you'd like. Let's say 3.14.
305
+
306
+ ```bash
307
+ uv tool run --python 3.14 not1mm
308
+ ```
309
+
310
+ It'll download Python 3.14 into you virtual environment and run not1mm.
311
+
312
+ Let's say I was an idiot and pushed a new version and did't fully test it. This happens a-lot... We test in production. Or lets say you just want to see the pain that was back in 2023. No problem.
313
+
314
+ ```bash
315
+ uv tool run --python 3.10 not1mm==23.5.19
316
+ ```
317
+
318
+ Pow! Enjoy the pain... If uv is not your cuppa, you can follow the more traditional route below.
319
+
283
320
  ### Common Installation Recipes for Ubuntu and Fedora
284
321
 
285
322
  I've taken the time to install some common Linux distributions into a VM and
@@ -381,7 +418,7 @@ all the details from:
381
418
  In short, You should install stuff into a Python virtual environment. Newer
382
419
  Linux distros will make you do this unless you include a command line argument
383
420
  akin to '--break-my-system' when using pip. I'm not telling you to use pipx.
384
- But... **Use pipx**.
421
+ But... **Use pipx**. Or better visit the [section above](#the-easy-and-fast-way-to-always-run-the-latest-version) on using uv.
385
422
 
386
423
  #### Bootstrapping pipx
387
424
 
@@ -30,6 +30,7 @@
30
30
  - [Flatpak](#flatpak)
31
31
  - [Installation](#installation)
32
32
  - [Prerequisites](#prerequisites)
33
+ - [The Easy and Fast way to always run the latest version](#the-easy-and-fast-way-to-always-run-the-latest-version)
33
34
  - [Common Installation Recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
34
35
  - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
35
36
  - [Ubuntu 23.04](#ubuntu-2304)
@@ -224,6 +225,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
224
225
 
225
226
  ## Recent Changes
226
227
 
228
+ - [25-5-22] Trap possible ValueError exception in settings.py
229
+ -[25-5-21] Fix crash from unsafe dict key access when processing F1-F12.
227
230
  - [25-5-6] Merged PR from @JG3LLB, Koji-Kawano, Adding code to stop sending morse if using rigctld to send, and @alduhoo adding more control to CW serial number padding.
228
231
 
229
232
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -248,6 +251,40 @@ Not1MM requires:
248
251
 
249
252
  You should install these through your distribution's package manager before continuing.
250
253
 
254
+ ### The Easy and Fast way to always run the latest version
255
+
256
+ - Step 1. Visit [Astral](https://docs.astral.sh/uv/) and install uv.
257
+
258
+ In short you run this in your terminal:
259
+
260
+ ```bash
261
+ curl -LsSf https://astral.sh/uv/install.sh | sh
262
+ ```
263
+
264
+ - Step 2. Tell it to run not1mm:
265
+
266
+ ```bash
267
+ uv tool run not1mm
268
+ ```
269
+
270
+ That's it... It will go out, fetch the latest version of not1mm, setup a python virtual environment, get all the needed python libraries, cache everything and run not1mm. The first time takes a minute, but each time after, it's lightning quick and it will automatically check for updates and run the latest version.
271
+
272
+ But wait... There's more. If your distro is old and you're stuck with an older version of python... Say 3.10. And you want to see what all the cool kids are using. But you don't want to corrupt your broke ol' system by downloading the newest Python version. No problem. You can tell uv to run not1mm with any version of Python you'd like. Let's say 3.14.
273
+
274
+ ```bash
275
+ uv tool run --python 3.14 not1mm
276
+ ```
277
+
278
+ It'll download Python 3.14 into you virtual environment and run not1mm.
279
+
280
+ Let's say I was an idiot and pushed a new version and did't fully test it. This happens a-lot... We test in production. Or lets say you just want to see the pain that was back in 2023. No problem.
281
+
282
+ ```bash
283
+ uv tool run --python 3.10 not1mm==23.5.19
284
+ ```
285
+
286
+ Pow! Enjoy the pain... If uv is not your cuppa, you can follow the more traditional route below.
287
+
251
288
  ### Common Installation Recipes for Ubuntu and Fedora
252
289
 
253
290
  I've taken the time to install some common Linux distributions into a VM and
@@ -349,7 +386,7 @@ all the details from:
349
386
  In short, You should install stuff into a Python virtual environment. Newer
350
387
  Linux distros will make you do this unless you include a command line argument
351
388
  akin to '--break-my-system' when using pip. I'm not telling you to use pipx.
352
- But... **Use pipx**.
389
+ But... **Use pipx**. Or better visit the [section above](#the-easy-and-fast-way-to-always-run-the-latest-version) on using uv.
353
390
 
354
391
  #### Bootstrapping pipx
355
392
 
@@ -30,7 +30,7 @@ import notctyparser
30
30
 
31
31
  from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
32
32
  from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
33
- from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
33
+ from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap, QFont
34
34
  from PyQt6.QtWidgets import QFileDialog, QSplashScreen, QApplication
35
35
  from PyQt6.QtCore import QT_VERSION_STR, PYQT_VERSION_STR
36
36
 
@@ -212,7 +212,45 @@ class MainWindow(QtWidgets.QMainWindow):
212
212
  )
213
213
  self.setCorner(Qt.Corner.TopLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
214
214
  self.setCorner(Qt.Corner.BottomLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
215
+ self.fontfamily = self.load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
215
216
  uic.loadUi(fsutils.APP_DATA_PATH / "main.ui", self)
217
+ if sys.platform == "darwin":
218
+ def_font_size = 12
219
+
220
+ QApplication.instance().setFont(QFont(self.fontfamily, def_font_size))
221
+ self.F1.setFont(QFont(self.fontfamily, def_font_size))
222
+ self.F2.setFont(QFont(self.fontfamily, def_font_size))
223
+ self.F3.setFont(QFont(self.fontfamily, def_font_size))
224
+ self.F4.setFont(QFont(self.fontfamily, def_font_size))
225
+ self.F5.setFont(QFont(self.fontfamily, def_font_size))
226
+ self.F6.setFont(QFont(self.fontfamily, def_font_size))
227
+ self.F7.setFont(QFont(self.fontfamily, def_font_size))
228
+ self.F8.setFont(QFont(self.fontfamily, def_font_size))
229
+ self.F9.setFont(QFont(self.fontfamily, def_font_size))
230
+ self.F10.setFont(QFont(self.fontfamily, def_font_size))
231
+ self.F11.setFont(QFont(self.fontfamily, def_font_size))
232
+ self.F12.setFont(QFont(self.fontfamily, def_font_size))
233
+ self.radioButton_run.setFont(QFont(self.fontfamily, def_font_size))
234
+ self.radioButton_sp.setFont(QFont(self.fontfamily, def_font_size))
235
+ self.cw_speed.setFont(QFont(self.fontfamily, def_font_size))
236
+ self.callsign_label.setFont(QFont(self.fontfamily, def_font_size))
237
+ self.snt_label.setFont(QFont(self.fontfamily, def_font_size))
238
+ self.rcv_label.setFont(QFont(self.fontfamily, def_font_size))
239
+ self.other_label.setFont(QFont(self.fontfamily, def_font_size))
240
+ self.exch_label.setFont(QFont(self.fontfamily, def_font_size))
241
+ self.heading_distance.setFont(QFont(self.fontfamily, def_font_size))
242
+ self.history_info.setFont(QFont(self.fontfamily, def_font_size))
243
+ self.dx_entity.setFont(QFont(self.fontfamily, def_font_size))
244
+ self.score.setFont(QFont(self.fontfamily, def_font_size))
245
+ self.mults.setFont(QFont(self.fontfamily, def_font_size))
246
+
247
+ self.callsign.setFont(QFont(self.fontfamily, 20))
248
+ self.sent.setFont(QFont(self.fontfamily, 20))
249
+ self.receive.setFont(QFont(self.fontfamily, 20))
250
+ self.other_1.setFont(QFont(self.fontfamily, 20))
251
+ self.other_2.setFont(QFont(self.fontfamily, 20))
252
+ self.dupe_indicator.setFont(QFont(self.fontfamily, 20))
253
+
216
254
  self.history_info.hide()
217
255
  QApplication.instance().focusObjectChanged.connect(self.on_focus_changed)
218
256
  QApplication.instance().styleHints().colorSchemeChanged.connect(
@@ -1990,11 +2028,11 @@ class MainWindow(QtWidgets.QMainWindow):
1990
2028
  indicator.setFrameShape(QtWidgets.QFrame.Shape.NoFrame)
1991
2029
  if self.text_color == QColorConstants.Black:
1992
2030
  indicator.setStyleSheet(
1993
- "font-family: JetBrains Mono ExtraLight; color: black;"
2031
+ f"font-family: {self.fontfamily}; color: black;"
1994
2032
  )
1995
2033
  else:
1996
2034
  indicator.setStyleSheet(
1997
- "font-family: JetBrains Mono ExtraLight; color: white"
2035
+ f"font-family: {self.fontfamily}; color: white;"
1998
2036
  )
1999
2037
 
2000
2038
  def set_band_indicator(self, band: str) -> None:
@@ -2017,7 +2055,7 @@ class MainWindow(QtWidgets.QMainWindow):
2017
2055
  if indicator:
2018
2056
  indicator.setFrameShape(QtWidgets.QFrame.Shape.Box)
2019
2057
  indicator.setStyleSheet(
2020
- "font-family: JetBrains Mono ExtraLight; color: green;"
2058
+ f"font-family: {self.fontfamily}; color: green;"
2021
2059
  )
2022
2060
 
2023
2061
  def closeEvent(self, _event) -> None:
@@ -2872,7 +2910,13 @@ class MainWindow(QtWidgets.QMainWindow):
2872
2910
  next_serial = "1"
2873
2911
  macro = macro.upper()
2874
2912
  if self.radio_state.get("mode") == "CW":
2875
- macro = macro.replace("#", next_serial.rjust(self.pref["cwpaddinglength"], self.pref["cwpaddingchar"]))
2913
+ macro = macro.replace(
2914
+ "#",
2915
+ next_serial.rjust(
2916
+ self.pref.get("cwpaddinglength", 3),
2917
+ self.pref.get("cwpaddingchar", "T"),
2918
+ ),
2919
+ )
2876
2920
  else:
2877
2921
  macro = macro.replace("#", next_serial)
2878
2922
  macro = macro.replace("{MYCALL}", self.station.get("Call", ""))
@@ -2885,7 +2929,13 @@ class MainWindow(QtWidgets.QMainWindow):
2885
2929
  macro = macro.replace("{SNT}", self.sent.text())
2886
2930
  if self.radio_state.get("mode") == "CW":
2887
2931
  macro = macro.replace(
2888
- "{SENTNR}", self.other_1.text().lstrip("0").rjust(self.pref["cwpaddinglength"], self.pref["cwpaddingchar"])
2932
+ "{SENTNR}",
2933
+ self.other_1.text()
2934
+ .lstrip("0")
2935
+ .rjust(
2936
+ self.pref.get("cwpaddinglength", 3),
2937
+ self.pref.get("cwpaddingchar", "T"),
2938
+ ),
2889
2939
  )
2890
2940
  else:
2891
2941
  macro = macro.replace("{SENTNR}", self.other_1.text())
@@ -4177,26 +4227,26 @@ class MainWindow(QtWidgets.QMainWindow):
4177
4227
  logger.debug("******Cabrillo*****")
4178
4228
  self.contest.cabrillo(self, file_encoding)
4179
4229
 
4230
+ def load_fonts_from_dir(self, directory: str) -> str:
4231
+ """
4232
+ Well it loads fonts from a directory...
4180
4233
 
4181
- def load_fonts_from_dir(directory: str) -> set:
4182
- """
4183
- Well it loads fonts from a directory...
4184
-
4185
- Parameters
4186
- ----------
4187
- directory : str
4188
- The directory to load fonts from.
4234
+ Parameters
4235
+ ----------
4236
+ directory : str
4237
+ The directory to load fonts from.
4189
4238
 
4190
- Returns
4191
- -------
4192
- set
4193
- A set of font families installed in the directory.
4194
- """
4195
- font_families = set()
4196
- for _fi in QDir(directory).entryInfoList(["*.ttf", "*.woff", "*.woff2"]):
4197
- _id = QFontDatabase.addApplicationFont(_fi.absoluteFilePath())
4198
- font_families |= set(QFontDatabase.applicationFontFamilies(_id))
4199
- return font_families
4239
+ Returns
4240
+ -------
4241
+ set
4242
+ A set of font families installed in the directory.
4243
+ """
4244
+ font_families = set()
4245
+ for _fi in QDir(directory).entryInfoList(["*.ttf", "*.woff", "*.woff2"]):
4246
+ _id = QFontDatabase.addApplicationFont(_fi.absoluteFilePath())
4247
+ font_families |= set(QFontDatabase.applicationFontFamilies(_id))
4248
+ result = set((max(font_families, key=len),))
4249
+ return list(result)[0]
4200
4250
 
4201
4251
 
4202
4252
  def install_icons() -> None:
@@ -4252,8 +4302,8 @@ def run() -> None:
4252
4302
  )
4253
4303
  QCoreApplication.processEvents()
4254
4304
 
4255
- families = load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
4256
- logger.info(f"font families {families}")
4305
+ # families = load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
4306
+ # logger.info(f"font families {families}")
4257
4307
  window = MainWindow(splash)
4258
4308
  window.callsign.setFocus()
4259
4309
  splash.finish(window)
@@ -19,7 +19,7 @@ from decimal import Decimal
19
19
  from json import loads
20
20
 
21
21
  from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
22
- from PyQt6.QtGui import QColorConstants, QPalette, QColor
22
+ from PyQt6.QtGui import QColorConstants, QPalette, QColor, QFont
23
23
  from PyQt6.QtWidgets import QDockWidget
24
24
  from PyQt6.QtCore import Qt, pyqtSignal
25
25
 
@@ -343,6 +343,8 @@ class BandMapWindow(QDockWidget):
343
343
  self._udpwatch = None
344
344
 
345
345
  uic.loadUi(fsutils.APP_DATA_PATH / "bandmap.ui", self)
346
+ self.thefont = QFont()
347
+ self.thefont.setFamily("JetBrains Mono")
346
348
  self.settings = self.get_settings()
347
349
  self.clear_spot_olderSpinBox.setValue(
348
350
  int(self.settings.get("cluster_expire", 1))
@@ -581,6 +583,7 @@ class BandMapWindow(QDockWidget):
581
583
  freq = self.currentBand.start + step * i
582
584
  text = f"{freq:.3f}"
583
585
  self.something = self.bandmap_scene.addText(text)
586
+ self.something.setFont(self.thefont)
584
587
  self.something.setDefaultTextColor(self.text_color)
585
588
  self.something.setPos(
586
589
  -(self.something.boundingRect().width()) + 10,
@@ -726,6 +729,7 @@ class BandMapWindow(QDockWidget):
726
729
  + " "
727
730
  + items.get("ts").split()[1][:-3]
728
731
  )
732
+ text.setFont(self.thefont)
729
733
  text.document().setDocumentMargin(0)
730
734
  text.setPos(60, text_y - (text.boundingRect().height() / 2))
731
735
  text.setFlags(
@@ -18,7 +18,7 @@
18
18
  <widget class="QLabel" name="label">
19
19
  <property name="font">
20
20
  <font>
21
- <family>JetBrains Mono ExtraLight</family>
21
+ <family>JetBrains Mono</family>
22
22
  <pointsize>30</pointsize>
23
23
  </font>
24
24
  </property>
@@ -12,7 +12,7 @@
12
12
  </property>
13
13
  <property name="font">
14
14
  <font>
15
- <family>JetBrains Mono ExtraLight</family>
15
+ <family>JetBrains Mono</family>
16
16
  </font>
17
17
  </property>
18
18
  <property name="windowTitle">
@@ -85,7 +85,7 @@
85
85
  <widget class="QScrollArea" name="scrollArea">
86
86
  <property name="font">
87
87
  <font>
88
- <family>JetBrains Mono ExtraLight</family>
88
+ <family>JetBrains Mono</family>
89
89
  <pointsize>9</pointsize>
90
90
  </font>
91
91
  </property>
@@ -106,7 +106,7 @@
106
106
  </property>
107
107
  <property name="font">
108
108
  <font>
109
- <family>JetBrains Mono ExtraLight</family>
109
+ <family>JetBrains Mono</family>
110
110
  <pointsize>9</pointsize>
111
111
  </font>
112
112
  </property>
@@ -115,7 +115,7 @@
115
115
  <widget class="QGraphicsView" name="graphicsView">
116
116
  <property name="font">
117
117
  <font>
118
- <family>JetBrains Mono ExtraLight</family>
118
+ <family>JetBrains Mono</family>
119
119
  <pointsize>6</pointsize>
120
120
  </font>
121
121
  </property>
@@ -12,7 +12,7 @@
12
12
  </property>
13
13
  <property name="font">
14
14
  <font>
15
- <family>JetBrains Mono ExtraLight</family>
15
+ <family>JetBrains Mono</family>
16
16
  </font>
17
17
  </property>
18
18
  <property name="focusPolicy">
@@ -33,7 +33,7 @@
33
33
  </property>
34
34
  <property name="font">
35
35
  <font>
36
- <family>JetBrains Mono ExtraLight</family>
36
+ <family>JetBrains Mono</family>
37
37
  <pointsize>12</pointsize>
38
38
  </font>
39
39
  </property>
@@ -70,7 +70,7 @@
70
70
  </property>
71
71
  <property name="font">
72
72
  <font>
73
- <family>JetBrains Mono ExtraLight</family>
73
+ <family>JetBrains Mono</family>
74
74
  <pointsize>12</pointsize>
75
75
  </font>
76
76
  </property>
@@ -107,7 +107,7 @@
107
107
  </property>
108
108
  <property name="font">
109
109
  <font>
110
- <family>JetBrains Mono ExtraLight</family>
110
+ <family>JetBrains Mono</family>
111
111
  <pointsize>12</pointsize>
112
112
  </font>
113
113
  </property>
@@ -141,7 +141,7 @@
141
141
  <widget class="QLabel" name="logListLabel">
142
142
  <property name="font">
143
143
  <font>
144
- <family>JetBrains Mono ExtraLight</family>
144
+ <family>JetBrains Mono</family>
145
145
  <pointsize>10</pointsize>
146
146
  </font>
147
147
  </property>
@@ -154,7 +154,7 @@
154
154
  <widget class="QLabel" name="masterListLabel">
155
155
  <property name="font">
156
156
  <font>
157
- <family>JetBrains Mono ExtraLight</family>
157
+ <family>JetBrains Mono</family>
158
158
  <pointsize>10</pointsize>
159
159
  </font>
160
160
  </property>
@@ -167,7 +167,7 @@
167
167
  <widget class="QLabel" name="telnetListLabel">
168
168
  <property name="font">
169
169
  <font>
170
- <family>JetBrains Mono ExtraLight</family>
170
+ <family>JetBrains Mono</family>
171
171
  <pointsize>10</pointsize>
172
172
  </font>
173
173
  </property>