not1mm 25.2.6__tar.gz → 25.2.12__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 (180) hide show
  1. {not1mm-25.2.6 → not1mm-25.2.12}/PKG-INFO +5 -3
  2. {not1mm-25.2.6 → not1mm-25.2.12}/README.md +4 -2
  3. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/__main__.py +0 -6
  4. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/new_contest.ui +5 -0
  5. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/settings.py +0 -2
  6. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/version.py +1 -1
  7. not1mm-25.2.12/not1mm/plugins/randomgram.py +262 -0
  8. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/voice_keying.py +1 -1
  9. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/PKG-INFO +5 -3
  10. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/SOURCES.txt +1 -0
  11. {not1mm-25.2.6 → not1mm-25.2.12}/pyproject.toml +1 -1
  12. {not1mm-25.2.6 → not1mm-25.2.12}/LICENSE +0 -0
  13. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/__init__.py +0 -0
  14. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/bandmap.py +0 -0
  15. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/checkwindow.py +0 -0
  16. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  17. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/about.ui +0 -0
  19. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/check.png +0 -0
  22. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/configuration.ui +0 -0
  24. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/contests.sql +0 -0
  25. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/cty.json +0 -0
  26. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/cwmacros.txt +0 -0
  27. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/donors.html +0 -0
  28. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/editcontact.ui +0 -0
  29. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/editmacro.ui +0 -0
  30. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/greendot.png +0 -0
  31. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/k6gte-not1mm.desktop +0 -0
  32. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/k6gte.not1mm-128.png +0 -0
  33. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/k6gte.not1mm-32.png +0 -0
  34. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/k6gte.not1mm-64.png +0 -0
  35. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/logwindow.ui +0 -0
  36. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/logwindowx.ui +0 -0
  37. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/main.ui +0 -0
  38. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/not1mm.html +0 -0
  39. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/opon.ui +0 -0
  40. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/0.wav +0 -0
  41. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/1.wav +0 -0
  42. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/2.wav +0 -0
  43. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/3.wav +0 -0
  44. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/4.wav +0 -0
  45. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/5.wav +0 -0
  46. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/6.wav +0 -0
  47. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/7.wav +0 -0
  48. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/73.wav +0 -0
  49. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/8.wav +0 -0
  50. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/9.wav +0 -0
  51. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/a.wav +0 -0
  52. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/again.wav +0 -0
  53. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/b.wav +0 -0
  54. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/c.wav +0 -0
  55. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/contest.wav +0 -0
  56. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/cq.wav +0 -0
  57. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/cq2.wav +0 -0
  58. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/d.wav +0 -0
  59. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/e.wav +0 -0
  60. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/f.wav +0 -0
  61. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/g.wav +0 -0
  62. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/h.wav +0 -0
  63. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/i.wav +0 -0
  64. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/j.wav +0 -0
  65. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/k.wav +0 -0
  66. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/k6gte.wav +0 -0
  67. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/l.wav +0 -0
  68. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/m.wav +0 -0
  69. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/mynumber.wav +0 -0
  70. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/n.wav +0 -0
  71. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/nil.wav +0 -0
  72. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/o.wav +0 -0
  73. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/p.wav +0 -0
  74. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/q.wav +0 -0
  75. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/r.wav +0 -0
  76. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/roger.wav +0 -0
  77. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/s.wav +0 -0
  78. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/space.wav +0 -0
  79. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/t.wav +0 -0
  80. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/thankyou.wav +0 -0
  81. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  82. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/u.wav +0 -0
  83. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/v.wav +0 -0
  84. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/w.wav +0 -0
  85. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/x.wav +0 -0
  86. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/y.wav +0 -0
  87. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/yourcall.wav +0 -0
  88. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/phonetics/z.wav +0 -0
  89. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/pickcontest.ui +0 -0
  90. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/radio_green.png +0 -0
  91. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/radio_grey.png +0 -0
  92. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/radio_red.png +0 -0
  93. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/ratewindow.ui +0 -0
  94. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/reddot.png +0 -0
  95. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/rttymacros.txt +0 -0
  96. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/settings.ui +0 -0
  97. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/splash.png +0 -0
  98. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/ssbmacros.txt +0 -0
  99. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/data/vfo.ui +0 -0
  100. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/fsutils.py +0 -0
  101. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/__init__.py +0 -0
  102. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/about.py +0 -0
  103. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/cat_interface.py +0 -0
  104. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/cwinterface.py +0 -0
  105. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/database.py +0 -0
  106. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/edit_contact.py +0 -0
  107. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/edit_macro.py +0 -0
  108. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/edit_opon.py +0 -0
  109. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/edit_station.py +0 -0
  110. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/fldigi_sendstring.py +0 -0
  111. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/ft8_watcher.py +0 -0
  112. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/ham_utility.py +0 -0
  113. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/lookup.py +0 -0
  114. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/multicast.py +0 -0
  115. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/n1mm.py +0 -0
  116. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/new_contest.py +0 -0
  117. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/plugin_common.py +0 -0
  118. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/select_contest.py +0 -0
  119. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/super_check_partial.py +0 -0
  120. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lib/versiontest.py +0 -0
  121. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/logwindow.py +0 -0
  122. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/lookupservice.py +0 -0
  123. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/10_10_fall_cw.py +0 -0
  124. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/10_10_spring_cw.py +0 -0
  125. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/10_10_summer_phone.py +0 -0
  126. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/10_10_winter_phone.py +0 -0
  127. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/__init__.py +0 -0
  128. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_10m.py +0 -0
  129. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_160m.py +0 -0
  130. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_dx_cw.py +0 -0
  131. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  132. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_field_day.py +0 -0
  133. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  134. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_ss_cw.py +0 -0
  135. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_ss_phone.py +0 -0
  136. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  137. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  138. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  139. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/canada_day.py +0 -0
  140. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_160_cw.py +0 -0
  141. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_160_ssb.py +0 -0
  142. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_wpx_cw.py +0 -0
  143. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  144. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  145. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_ww_cw.py +0 -0
  146. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_ww_rtty.py +0 -0
  147. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cq_ww_ssb.py +0 -0
  148. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/cwt.py +0 -0
  149. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/darc_xmas.py +0 -0
  150. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/general_logging.py +0 -0
  151. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/helvetia.py +0 -0
  152. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  153. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  154. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/iaru_hf.py +0 -0
  155. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/icwc_mst.py +0 -0
  156. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/jidx_cw.py +0 -0
  157. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/jidx_ph.py +0 -0
  158. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/k1usn_sst.py +0 -0
  159. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/labre_rs_digi.py +0 -0
  160. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/lz-dx.py +0 -0
  161. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/naqp_cw.py +0 -0
  162. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/naqp_rtty.py +0 -0
  163. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/naqp_ssb.py +0 -0
  164. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/phone_weekly_test.py +0 -0
  165. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/raem.py +0 -0
  166. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/ref_cw.py +0 -0
  167. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/ref_ssb.py +0 -0
  168. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/stew_perry_topband.py +0 -0
  169. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/weekly_rtty.py +0 -0
  170. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/plugins/winter_field_day.py +0 -0
  171. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/radio.py +0 -0
  172. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/ratewindow.py +0 -0
  173. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/rtc_service.py +0 -0
  174. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/test.py +0 -0
  175. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm/vfo.py +0 -0
  176. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/dependency_links.txt +0 -0
  177. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/entry_points.txt +0 -0
  178. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/requires.txt +0 -0
  179. {not1mm-25.2.6 → not1mm-25.2.12}/not1mm.egg-info/top_level.txt +0 -0
  180. {not1mm-25.2.6 → not1mm-25.2.12}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: not1mm
3
- Version: 25.2.6
3
+ Version: 25.2.12
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
@@ -228,6 +228,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
228
228
  - NAQP CW, RTTY, SSB
229
229
  - Phone Weekly Test
230
230
  - RAEM
231
+ - RandomGram
231
232
  - RAC Canada Day
232
233
  - REF CW, SSB
233
234
  - Stew Perry Topband
@@ -236,6 +237,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
236
237
 
237
238
  ## Recent Changes
238
239
 
240
+ - [25-2-12] Merged PR from @alduhoo Adding RandomGram event.
239
241
  - [25-2-6] Trimmed out newer tags from UI files, 'cause stuff be old sometimes.
240
242
 
241
243
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -686,7 +688,7 @@ files in your own voice.
686
688
  Aside from the `[filename]` wav files, there are also NATO phonetic wav files
687
689
  for each letter and number. So if your macro key holds
688
690
  `{HISCALL} {SNT} {SENTNR}` and you have entered K5TUX in callsign field during
689
- CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9 9, 3.
691
+ CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9, 3.
690
692
  Hopefully not in an idiots voice.
691
693
 
692
694
  ## cty.dat and QRZ lookups for distance and bearing
@@ -694,7 +696,7 @@ Hopefully not in an idiots voice.
694
696
  When a callsign is entered, a look up is first done in a cty.dat file to
695
697
  determin the country of origin, geographic center, cq zone and ITU region.
696
698
  Great circle calculations are done to determin the heading and distance from
697
- your gridsquare to the grographic center. This information then displayed at the
699
+ your gridsquare to the geographic center. This information then displayed at the
698
700
  bottom left.
699
701
 
700
702
  ![snapshot of heading and distance](https://github.com/mbridak/not1mm/raw/master/pic/heading_distance.png)
@@ -197,6 +197,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
197
197
  - NAQP CW, RTTY, SSB
198
198
  - Phone Weekly Test
199
199
  - RAEM
200
+ - RandomGram
200
201
  - RAC Canada Day
201
202
  - REF CW, SSB
202
203
  - Stew Perry Topband
@@ -205,6 +206,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
205
206
 
206
207
  ## Recent Changes
207
208
 
209
+ - [25-2-12] Merged PR from @alduhoo Adding RandomGram event.
208
210
  - [25-2-6] Trimmed out newer tags from UI files, 'cause stuff be old sometimes.
209
211
 
210
212
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -655,7 +657,7 @@ files in your own voice.
655
657
  Aside from the `[filename]` wav files, there are also NATO phonetic wav files
656
658
  for each letter and number. So if your macro key holds
657
659
  `{HISCALL} {SNT} {SENTNR}` and you have entered K5TUX in callsign field during
658
- CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9 9, 3.
660
+ CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9, 3.
659
661
  Hopefully not in an idiots voice.
660
662
 
661
663
  ## cty.dat and QRZ lookups for distance and bearing
@@ -663,7 +665,7 @@ Hopefully not in an idiots voice.
663
665
  When a callsign is entered, a look up is first done in a cty.dat file to
664
666
  determin the country of origin, geographic center, cq zone and ITU region.
665
667
  Great circle calculations are done to determin the heading and distance from
666
- your gridsquare to the grographic center. This information then displayed at the
668
+ your gridsquare to the geographic center. This information then displayed at the
667
669
  bottom left.
668
670
 
669
671
  ![snapshot of heading and distance](https://github.com/mbridak/not1mm/raw/master/pic/heading_distance.png)
@@ -27,12 +27,6 @@ from shutil import copyfile
27
27
 
28
28
  import notctyparser
29
29
 
30
- try:
31
- import sounddevice as sd
32
- except OSError as exception:
33
- print(exception)
34
- print("portaudio is not installed")
35
- sd = None
36
30
  from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
37
31
  from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
38
32
  from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
@@ -397,6 +397,11 @@
397
397
  <string>RAEM</string>
398
398
  </property>
399
399
  </item>
400
+ <item>
401
+ <property name="text">
402
+ <string>RANDOMGRAM</string>
403
+ </property>
404
+ </item>
400
405
  <item>
401
406
  <property name="text">
402
407
  <string>REF CW</string>
@@ -6,8 +6,6 @@ from PyQt6 import QtWidgets, uic
6
6
  try:
7
7
  import sounddevice as sd
8
8
  except OSError as exception:
9
- print(exception)
10
- print("portaudio is not installed")
11
9
  sd = None
12
10
 
13
11
 
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.2.6"
3
+ __version__ = "25.2.12"
@@ -0,0 +1,262 @@
1
+ """RandomGram plugin"""
2
+
3
+ # pylint: disable=invalid-name, unused-argument, unused-variable, c-extension-no-member, unused-import
4
+
5
+ import logging
6
+ import os
7
+
8
+ from PyQt6 import QtWidgets
9
+
10
+ from not1mm.lib.plugin_common import gen_adif
11
+ from not1mm.lib.version import __version__
12
+
13
+ logger = logging.getLogger(__name__)
14
+ EXCHANGE_HINT = ""
15
+ name = "RandomGram"
16
+ cabrillo_name = "RANDOMGRAM"
17
+ mode = "CW" # CW SSB BOTH RTTY
18
+ columns = [
19
+ "YYYY-MM-DD HH:MM:SS",
20
+ "Call",
21
+ "Freq",
22
+ "Snt",
23
+ "Rcv",
24
+ "SentNr",
25
+ "RcvNr",
26
+ ]
27
+
28
+ # 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
29
+ dupe_type = 4
30
+
31
+ rgGroupsPath = os.path.join(os.path.expanduser("~"), "rg.txt")
32
+ try:
33
+ with open(rgGroupsPath, "r") as f:
34
+ rgGroups = f.readlines()
35
+ except:
36
+ rgGroups = []
37
+
38
+ def init_contest(self):
39
+ """setup plugin"""
40
+ set_tab_next(self)
41
+ set_tab_prev(self)
42
+ interface(self)
43
+ self.next_field = self.other_2
44
+
45
+
46
+ def interface(self):
47
+ """Setup user interface"""
48
+ self.field1.show()
49
+ self.field2.show()
50
+ self.field3.show()
51
+ self.field4.show()
52
+ self.snt_label.setText("SNT")
53
+ self.field1.setAccessibleName("RST Sent")
54
+ self.other_label.setText("SentRG")
55
+ self.field3.setAccessibleName("Sent RandomGram")
56
+ self.exch_label.setText("RcvRG")
57
+ self.field4.setAccessibleName("Received RandomGram")
58
+
59
+
60
+ def reset_label(self):
61
+ """reset label after field cleared"""
62
+
63
+
64
+ def set_tab_next(self):
65
+ """Set TAB Advances"""
66
+ self.tab_next = {
67
+ self.callsign: self.sent,
68
+ self.sent: self.receive,
69
+ self.receive: self.other_1,
70
+ self.other_1: self.other_2,
71
+ self.other_2: self.callsign,
72
+ }
73
+
74
+
75
+ def set_tab_prev(self):
76
+ """Set TAB Advances"""
77
+ self.tab_prev = {
78
+ self.callsign: self.other_2,
79
+ self.sent: self.callsign,
80
+ self.receive: self.sent,
81
+ self.other_1: self.receive,
82
+ self.other_2: self.other_1,
83
+ }
84
+
85
+
86
+ def set_contact_vars(self):
87
+ """Contest Specific"""
88
+ self.contact["SNT"] = self.sent.text()
89
+ self.contact["RCV"] = self.receive.text()
90
+ self.contact["Comment"] = self.other_2.text()
91
+ self.contact["SentNr"] = self.other_1.text()
92
+ self.contact["NR"] = self.other_2.text()
93
+
94
+
95
+ def predupe(self):
96
+ """called after callsign entered"""
97
+
98
+
99
+ def prefill(self):
100
+ """Fill SentNR"""
101
+ qso_count = show_qso(self)
102
+ if len(rgGroups) <= qso_count:
103
+ return
104
+
105
+ nextRG = rgGroups[qso_count]
106
+ if len(nextRG) > 0:
107
+ self.other_1.setText(nextRG)
108
+
109
+
110
+ def points(self):
111
+ """Calc point"""
112
+ return 2
113
+
114
+
115
+ def show_mults(self):
116
+ """Return display string for mults"""
117
+
118
+
119
+ def show_qso(self):
120
+ """Return qso count"""
121
+ result = self.database.fetch_qso_count()
122
+ if result:
123
+ return int(result.get("qsos", 0))
124
+ return 0
125
+
126
+
127
+ def calc_score(self):
128
+ """Return calculated score"""
129
+ result = self.database.fetch_points()
130
+
131
+
132
+ def adif(self):
133
+ """Call the generate ADIF function"""
134
+ gen_adif(self, cabrillo_name)
135
+
136
+
137
+ def cabrillo(self, file_encoding):
138
+ """Generates Cabrillo file. Maybe."""
139
+
140
+
141
+ def recalculate_mults(self):
142
+ """Recalculates multipliers after change in logged qso."""
143
+
144
+
145
+ def process_esm(self, new_focused_widget=None, with_enter=False):
146
+ """ESM State Machine"""
147
+
148
+ # self.pref["run_state"]
149
+
150
+ # -----===== Assigned F-Keys =====-----
151
+ # self.esm_dict["CQ"]
152
+ # self.esm_dict["EXCH"]
153
+ # self.esm_dict["QRZ"]
154
+ # self.esm_dict["AGN"]
155
+ # self.esm_dict["HISCALL"]
156
+ # self.esm_dict["MYCALL"]
157
+ # self.esm_dict["QSOB4"]
158
+
159
+ # ----==== text fields ====----
160
+ # self.callsign
161
+ # self.sent
162
+ # self.receive
163
+ # self.other_1
164
+ # self.other_2
165
+
166
+ if new_focused_widget is not None:
167
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
168
+
169
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
170
+
171
+ for a_button in [
172
+ self.F1,
173
+ self.F2,
174
+ self.F3,
175
+ self.F4,
176
+ self.F5,
177
+ self.F6,
178
+ self.F7,
179
+ self.F8,
180
+ self.F9,
181
+ self.F10,
182
+ self.F11,
183
+ self.F12,
184
+ ]:
185
+ self.restore_button_color(a_button)
186
+
187
+ buttons_to_send = []
188
+
189
+ if self.pref.get("run_state"):
190
+ if self.current_widget == "callsign":
191
+ if len(self.callsign.text()) < 3:
192
+ self.make_button_green(self.esm_dict["CQ"])
193
+ buttons_to_send.append(self.esm_dict["CQ"])
194
+ elif len(self.callsign.text()) > 2:
195
+ self.make_button_green(self.esm_dict["HISCALL"])
196
+ self.make_button_green(self.esm_dict["EXCH"])
197
+ buttons_to_send.append(self.esm_dict["HISCALL"])
198
+ buttons_to_send.append(self.esm_dict["EXCH"])
199
+
200
+ # elif self.current_widget in ["other_1", "other_2"]:
201
+ # if self.other_2.text() == "" and self.other_1.text() == "":
202
+ # self.make_button_green(self.esm_dict["AGN"])
203
+ # buttons_to_send.append(self.esm_dict["AGN"])
204
+ # else:
205
+ # self.make_button_green(self.esm_dict["QRZ"])
206
+ # buttons_to_send.append(self.esm_dict["QRZ"])
207
+ # buttons_to_send.append("LOGIT")
208
+
209
+ elif self.current_widget in ["other_1", "other_2"]:
210
+ buttons_to_send.append("LOGIT")
211
+
212
+ if with_enter is True and bool(len(buttons_to_send)):
213
+ for button in buttons_to_send:
214
+ if button:
215
+ if button == "LOGIT":
216
+ self.save_contact()
217
+ continue
218
+ self.process_function_key(button)
219
+ else:
220
+ if self.current_widget == "callsign":
221
+ if len(self.callsign.text()) > 2:
222
+ self.make_button_green(self.esm_dict["MYCALL"])
223
+ buttons_to_send.append(self.esm_dict["MYCALL"])
224
+
225
+ # elif self.current_widget in ["other_1", "other_2"]:
226
+ # if self.other_2.text() == "" and self.other_1.text() == "":
227
+ # self.make_button_green(self.esm_dict["AGN"])
228
+ # buttons_to_send.append(self.esm_dict["AGN"])
229
+ # else:
230
+ # self.make_button_green(self.esm_dict["EXCH"])
231
+ # buttons_to_send.append(self.esm_dict["EXCH"])
232
+ # buttons_to_send.append("LOGIT")
233
+
234
+ elif self.current_widget in ["other_1", "other_2"]:
235
+ buttons_to_send.append("LOGIT")
236
+
237
+ if with_enter is True and bool(len(buttons_to_send)):
238
+ for button in buttons_to_send:
239
+ if button:
240
+ if button == "LOGIT":
241
+ self.save_contact()
242
+ continue
243
+ self.process_function_key(button)
244
+
245
+
246
+ def populate_history_info_line(self):
247
+ result = self.database.fetch_call_history(self.callsign.text())
248
+ if result:
249
+ self.history_info.setText(
250
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('UserText','...')}"
251
+ )
252
+ else:
253
+ self.history_info.setText("")
254
+
255
+
256
+ def check_call_history(self):
257
+ """"""
258
+ result = self.database.fetch_call_history(self.callsign.text())
259
+ if result:
260
+ self.history_info.setText(f"{result.get('UserText','')}")
261
+ if self.other_1.text() == "":
262
+ self.other_1.setText(f"{result.get('Name', '')}")
@@ -25,7 +25,7 @@ import soundfile as sf
25
25
 
26
26
  from PyQt6.QtCore import QObject, pyqtSignal, QThread
27
27
 
28
- logger = logging.getLogger("cat_interface")
28
+ logger = logging.getLogger("voice_keying")
29
29
 
30
30
 
31
31
  class Voice(QObject):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: not1mm
3
- Version: 25.2.6
3
+ Version: 25.2.12
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
@@ -228,6 +228,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
228
228
  - NAQP CW, RTTY, SSB
229
229
  - Phone Weekly Test
230
230
  - RAEM
231
+ - RandomGram
231
232
  - RAC Canada Day
232
233
  - REF CW, SSB
233
234
  - Stew Perry Topband
@@ -236,6 +237,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
236
237
 
237
238
  ## Recent Changes
238
239
 
240
+ - [25-2-12] Merged PR from @alduhoo Adding RandomGram event.
239
241
  - [25-2-6] Trimmed out newer tags from UI files, 'cause stuff be old sometimes.
240
242
 
241
243
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -686,7 +688,7 @@ files in your own voice.
686
688
  Aside from the `[filename]` wav files, there are also NATO phonetic wav files
687
689
  for each letter and number. So if your macro key holds
688
690
  `{HISCALL} {SNT} {SENTNR}` and you have entered K5TUX in callsign field during
689
- CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9 9, 3.
691
+ CQ WW SSB while in CQ Zone 3. You'll here Kilo 5 Tango Uniform X-ray, 5 9, 3.
690
692
  Hopefully not in an idiots voice.
691
693
 
692
694
  ## cty.dat and QRZ lookups for distance and bearing
@@ -694,7 +696,7 @@ Hopefully not in an idiots voice.
694
696
  When a callsign is entered, a look up is first done in a cty.dat file to
695
697
  determin the country of origin, geographic center, cq zone and ITU region.
696
698
  Great circle calculations are done to determin the heading and distance from
697
- your gridsquare to the grographic center. This information then displayed at the
699
+ your gridsquare to the geographic center. This information then displayed at the
698
700
  bottom left.
699
701
 
700
702
  ![snapshot of heading and distance](https://github.com/mbridak/not1mm/raw/master/pic/heading_distance.png)
@@ -170,6 +170,7 @@ not1mm/plugins/naqp_rtty.py
170
170
  not1mm/plugins/naqp_ssb.py
171
171
  not1mm/plugins/phone_weekly_test.py
172
172
  not1mm/plugins/raem.py
173
+ not1mm/plugins/randomgram.py
173
174
  not1mm/plugins/ref_cw.py
174
175
  not1mm/plugins/ref_ssb.py
175
176
  not1mm/plugins/stew_perry_topband.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "25.2.6"
7
+ version = "25.2.12"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
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
File without changes
File without changes