not1mm 25.3.10__tar.gz → 25.3.17__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 (181) hide show
  1. {not1mm-25.3.10 → not1mm-25.3.17}/PKG-INFO +14 -3
  2. {not1mm-25.3.10 → not1mm-25.3.17}/README.md +13 -2
  3. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/new_contest.ui +5 -0
  4. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/plugin_common.py +1 -1
  5. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/version.py +1 -1
  6. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/10_10_fall_cw.py +1 -1
  7. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/10_10_spring_cw.py +1 -1
  8. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/10_10_summer_phone.py +1 -1
  9. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/10_10_winter_phone.py +1 -1
  10. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_10m.py +1 -1
  11. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_160m.py +1 -1
  12. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_dx_cw.py +1 -1
  13. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_dx_ssb.py +1 -1
  14. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_field_day.py +22 -1
  15. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_rtty_ru.py +1 -1
  16. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_ss_cw.py +1 -1
  17. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_ss_phone.py +1 -1
  18. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_vhf_jan.py +1 -1
  19. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_vhf_jun.py +1 -1
  20. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/arrl_vhf_sep.py +1 -1
  21. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/canada_day.py +1 -1
  22. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_160_cw.py +1 -1
  23. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_160_ssb.py +1 -1
  24. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_wpx_cw.py +1 -1
  25. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_wpx_rtty.py +1 -1
  26. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_wpx_ssb.py +1 -1
  27. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_ww_cw.py +1 -1
  28. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_ww_rtty.py +1 -1
  29. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cq_ww_ssb.py +1 -1
  30. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/cwt.py +1 -1
  31. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/darc_xmas.py +1 -1
  32. not1mm-25.3.17/not1mm/plugins/ea_rtty.py +740 -0
  33. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/helvetia.py +1 -1
  34. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/iaru_fieldday_r1_cw.py +1 -1
  35. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/iaru_fieldday_r1_ssb.py +1 -1
  36. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/iaru_hf.py +1 -1
  37. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/icwc_mst.py +1 -1
  38. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/jidx_cw.py +1 -1
  39. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/jidx_ph.py +1 -1
  40. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/k1usn_sst.py +1 -1
  41. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/labre_rs_digi.py +1 -1
  42. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/lz-dx.py +2 -2
  43. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/naqp_cw.py +1 -1
  44. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/naqp_rtty.py +1 -1
  45. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/naqp_ssb.py +1 -1
  46. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/phone_weekly_test.py +1 -1
  47. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/raem.py +1 -1
  48. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/ref_cw.py +1 -1
  49. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/ref_ssb.py +1 -1
  50. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/stew_perry_topband.py +1 -1
  51. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/weekly_rtty.py +1 -1
  52. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/winter_field_day.py +1 -1
  53. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/PKG-INFO +14 -3
  54. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/SOURCES.txt +1 -0
  55. {not1mm-25.3.10 → not1mm-25.3.17}/pyproject.toml +1 -1
  56. {not1mm-25.3.10 → not1mm-25.3.17}/LICENSE +0 -0
  57. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/__init__.py +0 -0
  58. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/__main__.py +0 -0
  59. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/bandmap.py +0 -0
  60. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/checkwindow.py +0 -0
  61. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  62. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/MASTER.SCP +0 -0
  63. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/about.ui +0 -0
  64. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  65. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/bandmap.ui +0 -0
  66. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/check.png +0 -0
  67. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/checkwindow.ui +0 -0
  68. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/configuration.ui +0 -0
  69. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/contests.sql +0 -0
  70. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/cty.json +0 -0
  71. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/cwmacros.txt +0 -0
  72. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/donors.html +0 -0
  73. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/editcontact.ui +0 -0
  74. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/editmacro.ui +0 -0
  75. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/greendot.png +0 -0
  76. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/k6gte-not1mm.desktop +0 -0
  77. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/k6gte.not1mm-128.png +0 -0
  78. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/k6gte.not1mm-32.png +0 -0
  79. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/k6gte.not1mm-64.png +0 -0
  80. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/logwindow.ui +0 -0
  81. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/logwindowx.ui +0 -0
  82. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/main.ui +0 -0
  83. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/not1mm.html +0 -0
  84. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/opon.ui +0 -0
  85. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/0.wav +0 -0
  86. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/1.wav +0 -0
  87. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/2.wav +0 -0
  88. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/3.wav +0 -0
  89. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/4.wav +0 -0
  90. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/5.wav +0 -0
  91. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/6.wav +0 -0
  92. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/7.wav +0 -0
  93. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/73.wav +0 -0
  94. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/8.wav +0 -0
  95. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/9.wav +0 -0
  96. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/a.wav +0 -0
  97. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/again.wav +0 -0
  98. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/b.wav +0 -0
  99. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/c.wav +0 -0
  100. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/contest.wav +0 -0
  101. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/cq.wav +0 -0
  102. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/cq2.wav +0 -0
  103. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/d.wav +0 -0
  104. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/e.wav +0 -0
  105. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/f.wav +0 -0
  106. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/g.wav +0 -0
  107. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/h.wav +0 -0
  108. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/i.wav +0 -0
  109. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/j.wav +0 -0
  110. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/k.wav +0 -0
  111. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/k6gte.wav +0 -0
  112. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/l.wav +0 -0
  113. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/m.wav +0 -0
  114. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/mynumber.wav +0 -0
  115. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/n.wav +0 -0
  116. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/nil.wav +0 -0
  117. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/o.wav +0 -0
  118. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/p.wav +0 -0
  119. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/q.wav +0 -0
  120. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/r.wav +0 -0
  121. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/roger.wav +0 -0
  122. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/s.wav +0 -0
  123. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/space.wav +0 -0
  124. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/t.wav +0 -0
  125. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/thankyou.wav +0 -0
  126. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  127. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/u.wav +0 -0
  128. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/v.wav +0 -0
  129. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/w.wav +0 -0
  130. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/x.wav +0 -0
  131. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/y.wav +0 -0
  132. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/yourcall.wav +0 -0
  133. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/phonetics/z.wav +0 -0
  134. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/pickcontest.ui +0 -0
  135. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/radio_green.png +0 -0
  136. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/radio_grey.png +0 -0
  137. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/radio_red.png +0 -0
  138. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/ratewindow.ui +0 -0
  139. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/reddot.png +0 -0
  140. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/rttymacros.txt +0 -0
  141. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/settings.ui +0 -0
  142. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/splash.png +0 -0
  143. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/ssbmacros.txt +0 -0
  144. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/data/vfo.ui +0 -0
  145. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/fsutils.py +0 -0
  146. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/__init__.py +0 -0
  147. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/about.py +0 -0
  148. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/cat_interface.py +0 -0
  149. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/cwinterface.py +0 -0
  150. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/database.py +0 -0
  151. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/edit_contact.py +0 -0
  152. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/edit_macro.py +0 -0
  153. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/edit_opon.py +0 -0
  154. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/edit_station.py +0 -0
  155. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/fldigi_sendstring.py +0 -0
  156. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/ft8_watcher.py +0 -0
  157. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/ham_utility.py +0 -0
  158. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/lookup.py +0 -0
  159. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/multicast.py +0 -0
  160. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/n1mm.py +0 -0
  161. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/new_contest.py +0 -0
  162. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/select_contest.py +0 -0
  163. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/settings.py +0 -0
  164. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/super_check_partial.py +0 -0
  165. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lib/versiontest.py +0 -0
  166. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/logwindow.py +0 -0
  167. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/lookupservice.py +0 -0
  168. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/__init__.py +0 -0
  169. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/general_logging.py +0 -0
  170. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/plugins/randomgram.py +0 -0
  171. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/radio.py +0 -0
  172. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/ratewindow.py +0 -0
  173. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/rtc_service.py +0 -0
  174. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/test.py +0 -0
  175. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/vfo.py +0 -0
  176. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm/voice_keying.py +0 -0
  177. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/dependency_links.txt +0 -0
  178. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/entry_points.txt +0 -0
  179. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/requires.txt +0 -0
  180. {not1mm-25.3.10 → not1mm-25.3.17}/not1mm.egg-info/top_level.txt +0 -0
  181. {not1mm-25.3.10 → not1mm-25.3.17}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: not1mm
3
- Version: 25.3.10
3
+ Version: 25.3.17
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
@@ -133,11 +133,13 @@ Requires-Dist: Levenshtein
133
133
  - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
134
134
  - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
135
135
  - [Call History Files](#call-history-files)
136
+ - [Creating your own Call History files](#creating-your-own-call-history-files)
136
137
  - [Contest specific notes](#contest-specific-notes)
137
138
  - [ARRL Sweekstakes](#arrl-sweekstakes)
138
139
  - [The exchange parser](#the-exchange-parser)
139
140
  - [The exchange](#the-exchange)
140
141
  - [RAEM](#raem)
142
+ - [RandomGram](#randomgram)
141
143
 
142
144
  ## What and Why is Not1MM
143
145
 
@@ -240,6 +242,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
240
242
 
241
243
  ## Recent Changes
242
244
 
245
+ - [25-3-17] Add EA RTTY contest.
246
+ - [25-3-14] Add call history support to ARR Field Day.
243
247
  - [25-3-10] Slight change to adif header. Slight change to CAT status icon state.
244
248
  - [25-3-5] Added checks for blank/comment lines in the macros
245
249
  - [25-3-2] Added call history support to ARRL DX, just in time for it to be over.
@@ -920,13 +924,16 @@ QRZ (for Run) or Exchange (for S&P) is sent.
920
924
 
921
925
  ## Call History Files
922
926
 
923
- I've started work on using 'call history files'. To test it, you can
924
- go to `FILE -> Configuration Settings`
927
+ To use Call History files, go to `FILE -> Configuration Settings`
925
928
 
926
929
  ![Config Screen](https://github.com/mbridak/not1mm/raw/master/pic/configuration_options.png)
927
930
 
928
931
  Place a check in the `Use Call History` box. Call history files are very specific to the contest you are working. Example files can be obtained from [n1mm's](https://n1mmwp.hamdocs.com/mmfiles/categories/callhistory/?) website. They have a searchbox so you can find the contest you are looking for. If you are feeling masocistic, you can craft your own. The general makeup of the file is a header defining the fields to be used, followed by by lines of comma separated data.
929
932
 
933
+ ### Creating your own Call History files
934
+
935
+ You can use [adif2callhistory](https://github.com/mbridak/adif2callhistory) to generate your own call history file from your ADIF files. You can use a list of call history keys used for each contest [here](https://github.com/mbridak/not1mm/blob/master/call_history_keys.md).
936
+
930
937
  An example file excerpt looks like:
931
938
 
932
939
  ```text
@@ -1011,3 +1018,7 @@ For the Run Exchange macro I'd put `{HISCALL} {SENTNR} {EXCH}`.
1011
1018
 
1012
1019
  In the New/Edit Contest dialog, in the exchange field put just your Lat and Lon.
1013
1020
  for me 33N117W. And in the exchange macro put `# {EXCH}`.
1021
+
1022
+ ### RandomGram
1023
+
1024
+ This plugin was submitted by @alduhoo. It reads a rg.txt file if it exists in the user's home directory to populate the next group in the sent exchange field.
@@ -102,11 +102,13 @@
102
102
  - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
103
103
  - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
104
104
  - [Call History Files](#call-history-files)
105
+ - [Creating your own Call History files](#creating-your-own-call-history-files)
105
106
  - [Contest specific notes](#contest-specific-notes)
106
107
  - [ARRL Sweekstakes](#arrl-sweekstakes)
107
108
  - [The exchange parser](#the-exchange-parser)
108
109
  - [The exchange](#the-exchange)
109
110
  - [RAEM](#raem)
111
+ - [RandomGram](#randomgram)
110
112
 
111
113
  ## What and Why is Not1MM
112
114
 
@@ -209,6 +211,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
209
211
 
210
212
  ## Recent Changes
211
213
 
214
+ - [25-3-17] Add EA RTTY contest.
215
+ - [25-3-14] Add call history support to ARR Field Day.
212
216
  - [25-3-10] Slight change to adif header. Slight change to CAT status icon state.
213
217
  - [25-3-5] Added checks for blank/comment lines in the macros
214
218
  - [25-3-2] Added call history support to ARRL DX, just in time for it to be over.
@@ -889,13 +893,16 @@ QRZ (for Run) or Exchange (for S&P) is sent.
889
893
 
890
894
  ## Call History Files
891
895
 
892
- I've started work on using 'call history files'. To test it, you can
893
- go to `FILE -> Configuration Settings`
896
+ To use Call History files, go to `FILE -> Configuration Settings`
894
897
 
895
898
  ![Config Screen](https://github.com/mbridak/not1mm/raw/master/pic/configuration_options.png)
896
899
 
897
900
  Place a check in the `Use Call History` box. Call history files are very specific to the contest you are working. Example files can be obtained from [n1mm's](https://n1mmwp.hamdocs.com/mmfiles/categories/callhistory/?) website. They have a searchbox so you can find the contest you are looking for. If you are feeling masocistic, you can craft your own. The general makeup of the file is a header defining the fields to be used, followed by by lines of comma separated data.
898
901
 
902
+ ### Creating your own Call History files
903
+
904
+ You can use [adif2callhistory](https://github.com/mbridak/adif2callhistory) to generate your own call history file from your ADIF files. You can use a list of call history keys used for each contest [here](https://github.com/mbridak/not1mm/blob/master/call_history_keys.md).
905
+
899
906
  An example file excerpt looks like:
900
907
 
901
908
  ```text
@@ -980,3 +987,7 @@ For the Run Exchange macro I'd put `{HISCALL} {SENTNR} {EXCH}`.
980
987
 
981
988
  In the New/Edit Contest dialog, in the exchange field put just your Lat and Lon.
982
989
  for me 33N117W. And in the exchange macro put `# {EXCH}`.
990
+
991
+ ### RandomGram
992
+
993
+ This plugin was submitted by @alduhoo. It reads a rg.txt file if it exists in the user's home directory to populate the next group in the sent exchange field.
@@ -322,6 +322,11 @@
322
322
  <string>DARC XMAS</string>
323
323
  </property>
324
324
  </item>
325
+ <item>
326
+ <property name="text">
327
+ <string>EA RTTY</string>
328
+ </property>
329
+ </item>
325
330
  <item>
326
331
  <property name="text">
327
332
  <string>HELVETIA</string>
@@ -81,7 +81,7 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
81
81
  )
82
82
  log = self.database.fetch_all_contacts_asc()
83
83
  try:
84
- with open(filename, "w", encoding="utf-8") as file_descriptor:
84
+ with open(filename, "w", encoding="utf-8", newline="") as file_descriptor:
85
85
  print("Not1MM ADIF export", end="\r\n", file=file_descriptor)
86
86
  print("<ADIF_VER:5>2.2.0", end="\r\n", file=file_descriptor)
87
87
  print("<EOH>", end="\r\n", file=file_descriptor)
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.3.10"
3
+ __version__ = "25.3.17"
@@ -182,7 +182,7 @@ def cabrillo(self, file_encoding):
182
182
  logger.debug("%s", filename)
183
183
  log = self.database.fetch_all_contacts_asc()
184
184
  try:
185
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
185
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
186
186
  output_cabrillo_line(
187
187
  "START-OF-LOG: 3.0",
188
188
  "\r\n",
@@ -181,7 +181,7 @@ def cabrillo(self, file_encoding):
181
181
  logger.debug("%s", filename)
182
182
  log = self.database.fetch_all_contacts_asc()
183
183
  try:
184
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
184
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
185
185
  output_cabrillo_line(
186
186
  "START-OF-LOG: 3.0",
187
187
  "\r\n",
@@ -185,7 +185,7 @@ def cabrillo(self, file_encoding):
185
185
  logger.debug("%s", filename)
186
186
  log = self.database.fetch_all_contacts_asc()
187
187
  try:
188
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
188
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
189
189
  output_cabrillo_line(
190
190
  "START-OF-LOG: 3.0",
191
191
  "\r\n",
@@ -183,7 +183,7 @@ def cabrillo(self, file_encoding):
183
183
  logger.debug("%s", filename)
184
184
  log = self.database.fetch_all_contacts_asc()
185
185
  try:
186
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
186
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
187
187
  output_cabrillo_line(
188
188
  "START-OF-LOG: 3.0",
189
189
  "\r\n",
@@ -267,7 +267,7 @@ def cabrillo(self, file_encoding):
267
267
  logger.debug("%s", filename)
268
268
  log = self.database.fetch_all_contacts_asc()
269
269
  try:
270
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
270
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
271
271
  output_cabrillo_line(
272
272
  "START-OF-LOG: 3.0",
273
273
  "\r\n",
@@ -275,7 +275,7 @@ def cabrillo(self, file_encoding):
275
275
  logger.debug("%s", filename)
276
276
  log = self.database.fetch_all_contacts_asc()
277
277
  try:
278
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
278
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
279
279
  output_cabrillo_line(
280
280
  "START-OF-LOG: 3.0",
281
281
  "\r\n",
@@ -211,7 +211,7 @@ def cabrillo(self, file_encoding):
211
211
  logger.debug("%s", filename)
212
212
  log = self.database.fetch_all_contacts_asc()
213
213
  try:
214
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
214
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
215
215
  output_cabrillo_line(
216
216
  "START-OF-LOG: 3.0",
217
217
  "\r\n",
@@ -211,7 +211,7 @@ def cabrillo(self, file_encoding):
211
211
  logger.debug("%s", filename)
212
212
  log = self.database.fetch_all_contacts_asc()
213
213
  try:
214
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
214
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
215
215
  output_cabrillo_line(
216
216
  "START-OF-LOG: 3.0",
217
217
  "\r\n",
@@ -165,7 +165,7 @@ def cabrillo(self, file_encoding):
165
165
  logger.debug("%s", filename)
166
166
  log = self.database.fetch_all_contacts_asc()
167
167
  try:
168
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
168
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
169
169
  output_cabrillo_line(
170
170
  "START-OF-LOG: 3.0",
171
171
  "\r\n",
@@ -526,3 +526,24 @@ def get_mults(self):
526
526
  def just_points(self):
527
527
  """"""
528
528
  return get_points(self)
529
+
530
+
531
+ def populate_history_info_line(self):
532
+ result = self.database.fetch_call_history(self.callsign.text())
533
+ if result:
534
+ self.history_info.setText(
535
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('Sect', '')}, {result.get('UserText','...')}"
536
+ )
537
+ else:
538
+ self.history_info.setText("")
539
+
540
+
541
+ def check_call_history(self):
542
+ """"""
543
+ result = self.database.fetch_call_history(self.callsign.text())
544
+ if result:
545
+ self.history_info.setText(f"{result.get('UserText','')}")
546
+ if self.other_1.text() == "":
547
+ self.other_1.setText(f"{result.get('Exch1', '')}")
548
+ if self.other_2.text() == "":
549
+ self.other_2.setText(f"{result.get('Sect', '')}")
@@ -235,7 +235,7 @@ def cabrillo(self, file_encoding):
235
235
  logger.debug("%s", filename)
236
236
  log = self.database.fetch_all_contacts_asc()
237
237
  try:
238
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
238
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
239
239
  output_cabrillo_line(
240
240
  "START-OF-LOG: 3.0",
241
241
  "\r\n",
@@ -210,7 +210,7 @@ def cabrillo(self, file_encoding):
210
210
  logger.debug("%s", filename)
211
211
  log = self.database.fetch_all_contacts_asc()
212
212
  try:
213
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
213
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
214
214
  output_cabrillo_line(
215
215
  "START-OF-LOG: 3.0",
216
216
  "\r\n",
@@ -191,7 +191,7 @@ def cabrillo(self, file_encoding):
191
191
  logger.debug("%s", filename)
192
192
  log = self.database.fetch_all_contacts_asc()
193
193
  try:
194
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
194
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
195
195
  output_cabrillo_line(
196
196
  "START-OF-LOG: 3.0",
197
197
  "\r\n",
@@ -241,7 +241,7 @@ def cabrillo(self, file_encoding):
241
241
  logger.debug("%s", filename)
242
242
  log = self.database.fetch_all_contacts_asc()
243
243
  try:
244
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
244
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
245
245
  output_cabrillo_line(
246
246
  "START-OF-LOG: 3.0",
247
247
  "\r\n",
@@ -209,7 +209,7 @@ def cabrillo(self, file_encoding):
209
209
  logger.debug("%s", filename)
210
210
  log = self.database.fetch_all_contacts_asc()
211
211
  try:
212
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
212
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
213
213
  output_cabrillo_line(
214
214
  "START-OF-LOG: 3.0",
215
215
  "\r\n",
@@ -209,7 +209,7 @@ def cabrillo(self, file_encoding):
209
209
  logger.debug("%s", filename)
210
210
  log = self.database.fetch_all_contacts_asc()
211
211
  try:
212
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
212
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
213
213
  output_cabrillo_line(
214
214
  "START-OF-LOG: 3.0",
215
215
  "\r\n",
@@ -232,7 +232,7 @@ def cabrillo(self, file_encoding):
232
232
  logger.debug("%s", filename)
233
233
  log = self.database.fetch_all_contacts_asc()
234
234
  try:
235
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
235
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
236
236
  output_cabrillo_line(
237
237
  "START-OF-LOG: 3.0",
238
238
  "\r\n",
@@ -220,7 +220,7 @@ def cabrillo(self, file_encoding):
220
220
  logger.debug("%s", filename)
221
221
  log = self.database.fetch_all_contacts_asc()
222
222
  try:
223
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
223
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
224
224
  output_cabrillo_line(
225
225
  "START-OF-LOG: 3.0",
226
226
  "\r\n",
@@ -220,7 +220,7 @@ def cabrillo(self, file_encoding):
220
220
  logger.debug("%s", filename)
221
221
  log = self.database.fetch_all_contacts_asc()
222
222
  try:
223
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
223
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
224
224
  output_cabrillo_line(
225
225
  "START-OF-LOG: 3.0",
226
226
  "\r\n",
@@ -253,7 +253,7 @@ def cabrillo(self, file_encoding):
253
253
  logger.debug("%s", filename)
254
254
  log = self.database.fetch_all_contacts_asc()
255
255
  try:
256
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
256
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
257
257
  output_cabrillo_line(
258
258
  "START-OF-LOG: 3.0",
259
259
  "\r\n",
@@ -252,7 +252,7 @@ def cabrillo(self, file_encoding):
252
252
  logger.debug("%s", filename)
253
253
  log = self.database.fetch_all_contacts_asc()
254
254
  try:
255
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
255
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
256
256
  output_cabrillo_line(
257
257
  "START-OF-LOG: 3.0",
258
258
  "\r\n",
@@ -216,7 +216,7 @@ def cabrillo(self, file_encoding):
216
216
  logger.debug("%s", filename)
217
217
  log = self.database.fetch_all_contacts_asc()
218
218
  try:
219
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
219
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
220
220
  output_cabrillo_line(
221
221
  "START-OF-LOG: 3.0",
222
222
  "\r\n",
@@ -243,7 +243,7 @@ def cabrillo(self, file_encoding):
243
243
  logger.debug("%s", filename)
244
244
  log = self.database.fetch_all_contacts_asc()
245
245
  try:
246
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
246
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
247
247
  output_cabrillo_line(
248
248
  "START-OF-LOG: 3.0",
249
249
  "\r\n",
@@ -246,7 +246,7 @@ def cabrillo(self, file_encoding):
246
246
  logger.debug("%s", filename)
247
247
  log = self.database.fetch_all_contacts_asc()
248
248
  try:
249
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
249
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
250
250
  output_cabrillo_line(
251
251
  "START-OF-LOG: 3.0",
252
252
  "\r\n",
@@ -233,7 +233,7 @@ def cabrillo(self, file_encoding):
233
233
  logger.debug("%s", filename)
234
234
  log = self.database.fetch_all_contacts_asc()
235
235
  try:
236
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
236
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
237
237
  output_cabrillo_line(
238
238
  "START-OF-LOG: 3.0",
239
239
  "\r\n",
@@ -210,7 +210,7 @@ def cabrillo(self, file_encoding):
210
210
  logger.debug("%s", filename)
211
211
  log = self.database.fetch_all_contacts_asc()
212
212
  try:
213
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
213
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
214
214
  output_cabrillo_line(
215
215
  "START-OF-LOG: 3.0",
216
216
  "\r\n",
@@ -237,7 +237,7 @@ def cabrillo(self, file_encoding):
237
237
  logger.debug("%s", filename)
238
238
  log = self.database.fetch_all_contacts_asc()
239
239
  try:
240
- with open(filename, "w", encoding=file_encoding) as file_descriptor:
240
+ with open(filename, "w", encoding=file_encoding, newline="") as file_descriptor:
241
241
  output_cabrillo_line(
242
242
  "START-OF-LOG: 3.0",
243
243
  "\r\n",