not1mm 24.11.3__tar.gz → 24.11.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. {not1mm-24.11.3 → not1mm-24.11.5}/PKG-INFO +14 -3
  2. {not1mm-24.11.3 → not1mm-24.11.5}/README.md +13 -2
  3. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/__main__.py +8 -2
  4. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/lookup.py +2 -2
  5. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/version.py +1 -1
  6. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/10_10_fall_cw.py +1 -1
  7. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/10_10_spring_cw.py +1 -1
  8. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/10_10_summer_phone.py +1 -1
  9. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/10_10_winter_phone.py +1 -1
  10. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_10m.py +1 -1
  11. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_dx_cw.py +1 -1
  12. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_dx_ssb.py +1 -1
  13. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_field_day.py +1 -1
  14. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_ss_cw.py +1 -1
  15. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_ss_phone.py +1 -1
  16. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_vhf_jan.py +1 -1
  17. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_vhf_jun.py +1 -1
  18. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_vhf_sep.py +1 -1
  19. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/canada_day.py +1 -1
  20. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_160_cw.py +1 -1
  21. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_160_ssb.py +1 -1
  22. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_wpx_cw.py +1 -1
  23. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_wpx_rtty.py +1 -1
  24. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_wpx_ssb.py +1 -1
  25. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_ww_rtty.py +1 -1
  26. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_ww_ssb.py +1 -1
  27. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cwt.py +16 -9
  28. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/helvetia.py +102 -1
  29. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/iaru_fieldday_r1_cw.py +1 -1
  30. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/iaru_fieldday_r1_ssb.py +1 -1
  31. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/iaru_hf.py +1 -1
  32. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/icwc_mst.py +1 -1
  33. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/jidx_cw.py +1 -1
  34. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/jidx_ph.py +1 -1
  35. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/k1usn_sst.py +13 -1
  36. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/naqp_cw.py +13 -4
  37. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/naqp_rtty.py +13 -6
  38. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/naqp_ssb.py +13 -4
  39. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/phone_weekly_test.py +1 -1
  40. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/ref_cw.py +1 -1
  41. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/ref_ssb.py +1 -1
  42. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/stew_perry_topband.py +1 -1
  43. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/weekly_rtty.py +1 -1
  44. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/winter_field_day.py +13 -1
  45. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/PKG-INFO +14 -3
  46. {not1mm-24.11.3 → not1mm-24.11.5}/pyproject.toml +1 -1
  47. {not1mm-24.11.3 → not1mm-24.11.5}/LICENSE +0 -0
  48. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/__init__.py +0 -0
  49. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/bandmap.py +0 -0
  50. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/checkwindow.py +0 -0
  51. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  52. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/MASTER.SCP +0 -0
  53. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/about.ui +0 -0
  54. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  55. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/bandmap.ui +0 -0
  56. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/check.png +0 -0
  57. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/checkwindow.ui +0 -0
  58. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/configuration.ui +0 -0
  59. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/contests.sql +0 -0
  60. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/cty.json +0 -0
  61. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/cwmacros.txt +0 -0
  62. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/donors.html +0 -0
  63. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/editcontact.ui +0 -0
  64. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/editmacro.ui +0 -0
  65. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/greendot.png +0 -0
  66. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/k6gte-not1mm.desktop +0 -0
  67. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/k6gte.not1mm-128.png +0 -0
  68. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/k6gte.not1mm-32.png +0 -0
  69. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/k6gte.not1mm-64.png +0 -0
  70. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/logwindow.ui +0 -0
  71. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/logwindowx.ui +0 -0
  72. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/main.ui +0 -0
  73. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/new_contest.ui +0 -0
  74. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/not1mm.html +0 -0
  75. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/opon.ui +0 -0
  76. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/0.wav +0 -0
  77. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/1.wav +0 -0
  78. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/2.wav +0 -0
  79. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/3.wav +0 -0
  80. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/4.wav +0 -0
  81. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/5.wav +0 -0
  82. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/6.wav +0 -0
  83. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/7.wav +0 -0
  84. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/73.wav +0 -0
  85. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/8.wav +0 -0
  86. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/9.wav +0 -0
  87. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/a.wav +0 -0
  88. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/again.wav +0 -0
  89. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/b.wav +0 -0
  90. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/c.wav +0 -0
  91. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/contest.wav +0 -0
  92. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/cq.wav +0 -0
  93. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/cq2.wav +0 -0
  94. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/d.wav +0 -0
  95. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/e.wav +0 -0
  96. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/f.wav +0 -0
  97. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/g.wav +0 -0
  98. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/h.wav +0 -0
  99. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/i.wav +0 -0
  100. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/j.wav +0 -0
  101. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/k.wav +0 -0
  102. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/k6gte.wav +0 -0
  103. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/l.wav +0 -0
  104. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/m.wav +0 -0
  105. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/mynumber.wav +0 -0
  106. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/n.wav +0 -0
  107. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/nil.wav +0 -0
  108. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/o.wav +0 -0
  109. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/p.wav +0 -0
  110. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/q.wav +0 -0
  111. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/r.wav +0 -0
  112. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/roger.wav +0 -0
  113. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/s.wav +0 -0
  114. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/space.wav +0 -0
  115. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/t.wav +0 -0
  116. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/thankyou.wav +0 -0
  117. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  118. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/u.wav +0 -0
  119. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/v.wav +0 -0
  120. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/w.wav +0 -0
  121. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/x.wav +0 -0
  122. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/y.wav +0 -0
  123. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/yourcall.wav +0 -0
  124. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/phonetics/z.wav +0 -0
  125. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/pickcontest.ui +0 -0
  126. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/radio_green.png +0 -0
  127. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/radio_grey.png +0 -0
  128. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/radio_red.png +0 -0
  129. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/reddot.png +0 -0
  130. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/rttymacros.txt +0 -0
  131. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/settings.ui +0 -0
  132. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/splash.png +0 -0
  133. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/ssbmacros.txt +0 -0
  134. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/data/vfo.ui +0 -0
  135. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/fsutils.py +0 -0
  136. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/__init__.py +0 -0
  137. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/about.py +0 -0
  138. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/cat_interface.py +0 -0
  139. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/cwinterface.py +0 -0
  140. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/database.py +0 -0
  141. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/edit_contact.py +0 -0
  142. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/edit_macro.py +0 -0
  143. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/edit_opon.py +0 -0
  144. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/edit_station.py +0 -0
  145. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/fldigi_sendstring.py +0 -0
  146. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/fldigi_watcher.py +0 -0
  147. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/ft8_watcher.py +0 -0
  148. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/ham_utility.py +0 -0
  149. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/multicast.py +0 -0
  150. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/n1mm.py +0 -0
  151. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/new_contest.py +0 -0
  152. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/playsound.py +0 -0
  153. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/plugin_common.py +0 -0
  154. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/select_contest.py +0 -0
  155. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/settings.py +0 -0
  156. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/super_check_partial.py +0 -0
  157. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lib/versiontest.py +0 -0
  158. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/logwindow.py +0 -0
  159. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/lookupservice.py +0 -0
  160. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/__init__.py +0 -0
  161. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  162. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/cq_ww_cw.py +0 -0
  163. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/general_logging.py +0 -0
  164. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/plugins/raem.py +0 -0
  165. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/radio.py +0 -0
  166. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/test.py +0 -0
  167. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/vfo.py +0 -0
  168. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm/voice_keying.py +0 -0
  169. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/SOURCES.txt +0 -0
  170. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/dependency_links.txt +0 -0
  171. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/entry_points.txt +0 -0
  172. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/requires.txt +0 -0
  173. {not1mm-24.11.3 → not1mm-24.11.5}/not1mm.egg-info/top_level.txt +0 -0
  174. {not1mm-24.11.3 → not1mm-24.11.5}/setup.cfg +0 -0
  175. {not1mm-24.11.3 → not1mm-24.11.5}/test/contests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.3
3
+ Version: 24.11.5
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
@@ -100,6 +100,7 @@ Requires-Dist: Levenshtein
100
100
  - [Cluster](#cluster)
101
101
  - [N1MM Packets](#n1mm-packets)
102
102
  - [Bands](#bands)
103
+ - [Options](#options)
103
104
  - [Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts](#logging-wsjt-x-ft8ft4etc-and-fldigi-rtty-contacts)
104
105
  - [Sending CW](#sending-cw)
105
106
  - [Editing macro keys](#editing-macro-keys)
@@ -183,7 +184,7 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
183
184
 
184
185
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
185
186
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
186
- Day and ARRL VHF. Found works better if you don't use FlDigi for making the QSO at all.
187
+ Day and ARRL VHF. Found it works better if you don't use FlDigi for making the QSO at all.
187
188
  Rather just using it as a RTTY modem and sending the text for it to send from Not1MM
188
189
  using the function keys or ESM.
189
190
 
@@ -218,7 +219,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
218
219
  - **CQ WPX CW, RTTY, SSB**
219
220
  - **CQ World Wide CW, RTTY, SSB**
220
221
  - **CWOps CWT**
221
- - Helvetia
222
+ - **Helvetia**
222
223
  - IARU Fieldday R1 CW, SSB
223
224
  - IARU HF
224
225
  - ICWC MST
@@ -235,6 +236,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
235
236
 
236
237
  ## Recent Changes (Polishing the Turd)
237
238
 
239
+ - [24-11-5] Fix crash with bad qrz credentials.
240
+ - [24-11-3-1] Fixed CWT ESM, Add Call History to CWT, Helvetia, WFD, NAQP, K1USN. Add ESM Helvetia.
238
241
  - [24-11-3] Added RAEM contest
239
242
  - [24-11-2] Add beginning of call history files. Add command buttons.
240
243
 
@@ -611,6 +614,13 @@ appear. Those without will not.
611
614
 
612
615
  ![Bands Configuration Screen](https://github.com/mbridak/not1mm/raw/master/pic/configure_bands.png)
613
616
 
617
+ ### Options
618
+
619
+ On the Options TAB you can select to use Enter Sends Message (ESM), configure its function keys.
620
+ Select whether or not to use Call History info.
621
+
622
+ ![Bands Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
623
+
614
624
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
615
625
 
616
626
  **Digital modes only working for:**
@@ -737,6 +747,7 @@ is this has happened, since the gridsquare will replace the word "Regional".
737
747
  | [CTRL-M] | Mark Callsign to the bandmap window to work later. |
738
748
  | [CTRL-G] | Tune to a spot matching partial text in the callsign entry field (CAT Required). |
739
749
  | [CTRL-SHIFT-K] | Open CW text input field. |
750
+ | [CTRL-=] | Log the contact without sending the ESM macros.|
740
751
 
741
752
  ### The Log Window
742
753
 
@@ -69,6 +69,7 @@
69
69
  - [Cluster](#cluster)
70
70
  - [N1MM Packets](#n1mm-packets)
71
71
  - [Bands](#bands)
72
+ - [Options](#options)
72
73
  - [Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts](#logging-wsjt-x-ft8ft4etc-and-fldigi-rtty-contacts)
73
74
  - [Sending CW](#sending-cw)
74
75
  - [Editing macro keys](#editing-macro-keys)
@@ -152,7 +153,7 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
152
153
 
153
154
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
154
155
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
155
- Day and ARRL VHF. Found works better if you don't use FlDigi for making the QSO at all.
156
+ Day and ARRL VHF. Found it works better if you don't use FlDigi for making the QSO at all.
156
157
  Rather just using it as a RTTY modem and sending the text for it to send from Not1MM
157
158
  using the function keys or ESM.
158
159
 
@@ -187,7 +188,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
187
188
  - **CQ WPX CW, RTTY, SSB**
188
189
  - **CQ World Wide CW, RTTY, SSB**
189
190
  - **CWOps CWT**
190
- - Helvetia
191
+ - **Helvetia**
191
192
  - IARU Fieldday R1 CW, SSB
192
193
  - IARU HF
193
194
  - ICWC MST
@@ -204,6 +205,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
204
205
 
205
206
  ## Recent Changes (Polishing the Turd)
206
207
 
208
+ - [24-11-5] Fix crash with bad qrz credentials.
209
+ - [24-11-3-1] Fixed CWT ESM, Add Call History to CWT, Helvetia, WFD, NAQP, K1USN. Add ESM Helvetia.
207
210
  - [24-11-3] Added RAEM contest
208
211
  - [24-11-2] Add beginning of call history files. Add command buttons.
209
212
 
@@ -580,6 +583,13 @@ appear. Those without will not.
580
583
 
581
584
  ![Bands Configuration Screen](https://github.com/mbridak/not1mm/raw/master/pic/configure_bands.png)
582
585
 
586
+ ### Options
587
+
588
+ On the Options TAB you can select to use Enter Sends Message (ESM), configure its function keys.
589
+ Select whether or not to use Call History info.
590
+
591
+ ![Bands Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
592
+
583
593
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
584
594
 
585
595
  **Digital modes only working for:**
@@ -706,6 +716,7 @@ is this has happened, since the gridsquare will replace the word "Regional".
706
716
  | [CTRL-M] | Mark Callsign to the bandmap window to work later. |
707
717
  | [CTRL-G] | Tune to a spot matching partial text in the callsign entry field (CAT Required). |
708
718
  | [CTRL-SHIFT-K] | Open CW text input field. |
719
+ | [CTRL-=] | Log the contact without sending the ESM macros.|
709
720
 
710
721
  ### The Log Window
711
722
 
@@ -737,12 +737,16 @@ class MainWindow(QtWidgets.QMainWindow):
737
737
  group = {}
738
738
  fields = line.strip().split(",")
739
739
  # ['4U1WB','MDC','DC','89','']
740
+ number_of_fields = len(fields)
740
741
  count = 0
741
742
  try:
742
743
  for item in item_names:
743
744
  if item == "":
744
745
  continue
745
- group[item] = fields[count]
746
+ if count < number_of_fields:
747
+ group[item] = fields[count]
748
+ else:
749
+ group[item] = ""
746
750
  count += 1
747
751
  group_list.append(group)
748
752
  # database.add_callhistory_item(group)
@@ -1736,13 +1740,14 @@ class MainWindow(QtWidgets.QMainWindow):
1736
1740
  "[Shift-Tab]\tMove cursor left One field.\n"
1737
1741
  "[SPACE]\tWhen in the callsign field, will move the input to the\n"
1738
1742
  "\tfirst field needed for the exchange.\n"
1739
- "[Enter]\tSubmits the fields to the log.\n"
1743
+ "[Enter]\tSubmits the fields to the log. Unless ESM is enabled.\n"
1740
1744
  "[F1-F12]\tSend (CW or Voice) macros.\n"
1741
1745
  "[CTRL-G]\tTune to a spot matching partial text in the callsign\n"
1742
1746
  "\tentry field (CAT Required).\n"
1743
1747
  "[CTRL-M]\tMark Callsign to the bandmap window to work later."
1744
1748
  "[CTRL-S]\tSpot Callsign to the cluster.\n"
1745
1749
  "[CTRL-SHIFT-K] Open CW text input field.\n"
1750
+ "[CTRL-=]\tLog the contact without sending the ESM macros.\n"
1746
1751
  )
1747
1752
 
1748
1753
  def filepicker(self, action: str) -> str:
@@ -2284,6 +2289,7 @@ class MainWindow(QtWidgets.QMainWindow):
2284
2289
  self.dupe_indicator.hide()
2285
2290
  self.contact = self.database.empty_contact.copy()
2286
2291
  self.heading_distance.setText("")
2292
+ self.history_info.setText("")
2287
2293
  self.dx_entity.setText("")
2288
2294
 
2289
2295
  if self.contest:
@@ -183,7 +183,7 @@ class QRZlookup:
183
183
  Lookup a call on QRZ
184
184
  """
185
185
  logger.info("%s", call)
186
- _response = None
186
+ root = {}
187
187
  if self.session:
188
188
  payload = {"s": self.session, "callsign": call}
189
189
  try:
@@ -208,7 +208,7 @@ class QRZlookup:
208
208
  self.qrzurl, params=payload, timeout=3.0
209
209
  )
210
210
  baseroot = xmltodict.parse(query_result.text)
211
- root = baseroot.get("QRZDatabase")
211
+ root = baseroot.get("QRZDatabase", {})
212
212
  return root.get("Callsign")
213
213
 
214
214
 
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.11.3"
3
+ __version__ = "24.11.5"
@@ -194,7 +194,7 @@ def cabrillo(self, file_encoding):
194
194
  logger.debug("%s", filename)
195
195
  log = self.database.fetch_all_contacts_asc()
196
196
  try:
197
- with open(filename, "w", encoding="utf-8") as file_descriptor:
197
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
198
198
  output_cabrillo_line(
199
199
  "START-OF-LOG: 3.0",
200
200
  "\r\n",
@@ -193,7 +193,7 @@ def cabrillo(self, file_encoding):
193
193
  logger.debug("%s", filename)
194
194
  log = self.database.fetch_all_contacts_asc()
195
195
  try:
196
- with open(filename, "w", encoding="utf-8") as file_descriptor:
196
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
197
197
  output_cabrillo_line(
198
198
  "START-OF-LOG: 3.0",
199
199
  "\r\n",
@@ -195,7 +195,7 @@ def cabrillo(self, file_encoding):
195
195
  logger.debug("%s", filename)
196
196
  log = self.database.fetch_all_contacts_asc()
197
197
  try:
198
- with open(filename, "w", encoding="utf-8") as file_descriptor:
198
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
199
199
  output_cabrillo_line(
200
200
  "START-OF-LOG: 3.0",
201
201
  "\r\n",
@@ -195,7 +195,7 @@ def cabrillo(self, file_encoding):
195
195
  logger.debug("%s", filename)
196
196
  log = self.database.fetch_all_contacts_asc()
197
197
  try:
198
- with open(filename, "w", encoding="utf-8") as file_descriptor:
198
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
199
199
  output_cabrillo_line(
200
200
  "START-OF-LOG: 3.0",
201
201
  "\r\n",
@@ -277,7 +277,7 @@ def cabrillo(self, file_encoding):
277
277
  logger.debug("%s", filename)
278
278
  log = self.database.fetch_all_contacts_asc()
279
279
  try:
280
- with open(filename, "w", encoding="utf-8") as file_descriptor:
280
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
281
281
  output_cabrillo_line(
282
282
  "START-OF-LOG: 3.0",
283
283
  "\r\n",
@@ -219,7 +219,7 @@ def cabrillo(self, file_encoding):
219
219
  logger.debug("%s", filename)
220
220
  log = self.database.fetch_all_contacts_asc()
221
221
  try:
222
- with open(filename, "w", encoding="utf-8") as file_descriptor:
222
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
223
223
  output_cabrillo_line(
224
224
  "START-OF-LOG: 3.0",
225
225
  "\r\n",
@@ -219,7 +219,7 @@ def cabrillo(self, file_encoding):
219
219
  logger.debug("%s", filename)
220
220
  log = self.database.fetch_all_contacts_asc()
221
221
  try:
222
- with open(filename, "w", encoding="utf-8") as file_descriptor:
222
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
223
223
  output_cabrillo_line(
224
224
  "START-OF-LOG: 3.0",
225
225
  "\r\n",
@@ -173,7 +173,7 @@ def cabrillo(self, file_encoding):
173
173
  logger.debug("%s", filename)
174
174
  log = self.database.fetch_all_contacts_asc()
175
175
  try:
176
- with open(filename, "w", encoding="utf-8") as file_descriptor:
176
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
177
177
  output_cabrillo_line(
178
178
  "START-OF-LOG: 3.0",
179
179
  "\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="utf-8") as file_descriptor:
219
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
220
220
  output_cabrillo_line(
221
221
  "START-OF-LOG: 3.0",
222
222
  "\r\n",
@@ -206,7 +206,7 @@ def cabrillo(self, file_encoding):
206
206
  logger.debug("%s", filename)
207
207
  log = self.database.fetch_all_contacts_asc()
208
208
  try:
209
- with open(filename, "w", encoding="utf-8") as file_descriptor:
209
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
210
210
  output_cabrillo_line(
211
211
  "START-OF-LOG: 3.0",
212
212
  "\r\n",
@@ -256,7 +256,7 @@ def cabrillo(self, file_encoding):
256
256
  logger.debug("%s", filename)
257
257
  log = self.database.fetch_all_contacts_asc()
258
258
  try:
259
- with open(filename, "w", encoding="utf-8") as file_descriptor:
259
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
260
260
  output_cabrillo_line(
261
261
  "START-OF-LOG: 3.0",
262
262
  "\r\n",
@@ -224,7 +224,7 @@ def cabrillo(self, file_encoding):
224
224
  logger.debug("%s", filename)
225
225
  log = self.database.fetch_all_contacts_asc()
226
226
  try:
227
- with open(filename, "w", encoding="utf-8") as file_descriptor:
227
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
228
228
  output_cabrillo_line(
229
229
  "START-OF-LOG: 3.0",
230
230
  "\r\n",
@@ -224,7 +224,7 @@ def cabrillo(self, file_encoding):
224
224
  logger.debug("%s", filename)
225
225
  log = self.database.fetch_all_contacts_asc()
226
226
  try:
227
- with open(filename, "w", encoding="utf-8") as file_descriptor:
227
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
228
228
  output_cabrillo_line(
229
229
  "START-OF-LOG: 3.0",
230
230
  "\r\n",
@@ -247,7 +247,7 @@ def cabrillo(self, file_encoding):
247
247
  logger.debug("%s", filename)
248
248
  log = self.database.fetch_all_contacts_asc()
249
249
  try:
250
- with open(filename, "w", encoding="utf-8") as file_descriptor:
250
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
251
251
  output_cabrillo_line(
252
252
  "START-OF-LOG: 3.0",
253
253
  "\r\n",
@@ -234,7 +234,7 @@ def cabrillo(self, file_encoding):
234
234
  logger.debug("%s", filename)
235
235
  log = self.database.fetch_all_contacts_asc()
236
236
  try:
237
- with open(filename, "w", encoding="utf-8") as file_descriptor:
237
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
238
238
  output_cabrillo_line(
239
239
  "START-OF-LOG: 3.0",
240
240
  "\r\n",
@@ -234,7 +234,7 @@ def cabrillo(self, file_encoding):
234
234
  logger.debug("%s", filename)
235
235
  log = self.database.fetch_all_contacts_asc()
236
236
  try:
237
- with open(filename, "w", encoding="utf-8") as file_descriptor:
237
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
238
238
  output_cabrillo_line(
239
239
  "START-OF-LOG: 3.0",
240
240
  "\r\n",
@@ -266,7 +266,7 @@ def cabrillo(self, file_encoding):
266
266
  logger.debug("%s", filename)
267
267
  log = self.database.fetch_all_contacts_asc()
268
268
  try:
269
- with open(filename, "w", encoding="utf-8") as file_descriptor:
269
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
270
270
  output_cabrillo_line(
271
271
  "START-OF-LOG: 3.0",
272
272
  "\r\n",
@@ -265,7 +265,7 @@ def cabrillo(self, file_encoding):
265
265
  logger.debug("%s", filename)
266
266
  log = self.database.fetch_all_contacts_asc()
267
267
  try:
268
- with open(filename, "w", encoding="utf-8") as file_descriptor:
268
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
269
269
  output_cabrillo_line(
270
270
  "START-OF-LOG: 3.0",
271
271
  "\r\n",
@@ -231,7 +231,7 @@ def cabrillo(self, file_encoding):
231
231
  logger.debug("%s", filename)
232
232
  log = self.database.fetch_all_contacts_asc()
233
233
  try:
234
- with open(filename, "w", encoding="utf-8") as file_descriptor:
234
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
235
235
  output_cabrillo_line(
236
236
  "START-OF-LOG: 3.0",
237
237
  "\r\n",
@@ -254,7 +254,7 @@ def cabrillo(self, file_encoding):
254
254
  logger.debug("%s", filename)
255
255
  log = self.database.fetch_all_contacts_asc()
256
256
  try:
257
- with open(filename, "w", encoding="utf-8") as file_descriptor:
257
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
258
258
  output_cabrillo_line(
259
259
  "START-OF-LOG: 3.0",
260
260
  "\r\n",
@@ -230,7 +230,7 @@ def cabrillo(self, file_encoding):
230
230
  logger.debug("%s", filename)
231
231
  log = self.database.fetch_all_contacts_asc()
232
232
  try:
233
- with open(filename, "w", encoding="utf-8") as file_descriptor:
233
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
234
234
  output_cabrillo_line(
235
235
  "START-OF-LOG: 3.0",
236
236
  "\r\n",
@@ -224,7 +224,7 @@ def cabrillo(self, file_encoding):
224
224
  logger.debug("%s", filename)
225
225
  log = self.database.fetch_all_contacts_asc()
226
226
  try:
227
- with open(filename, "w", encoding="utf-8") as file_descriptor:
227
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
228
228
  output_cabrillo_line(
229
229
  "START-OF-LOG: 3.0",
230
230
  "\r\n",
@@ -478,13 +478,11 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
478
478
  if self.other_2.text() == "" or self.other_1.text() == "":
479
479
  self.make_button_green(self.esm_dict["AGN"])
480
480
  buttons_to_send.append(self.esm_dict["AGN"])
481
- elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
481
+ else:
482
482
  self.make_button_green(self.esm_dict["QRZ"])
483
483
  buttons_to_send.append(self.esm_dict["QRZ"])
484
484
  buttons_to_send.append("LOGIT")
485
- else:
486
- self.make_button_green(self.esm_dict["AGN"])
487
- buttons_to_send.append(self.esm_dict["AGN"])
485
+
488
486
  if with_enter is True and bool(len(buttons_to_send)):
489
487
  for button in buttons_to_send:
490
488
  if button:
@@ -502,13 +500,11 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
502
500
  if self.other_2.text() == "" or self.other_1.text() == "":
503
501
  self.make_button_green(self.esm_dict["AGN"])
504
502
  buttons_to_send.append(self.esm_dict["AGN"])
505
- elif self.other_1.text().isalpha() and self.other_2.text().isalpha():
503
+ else:
506
504
  self.make_button_green(self.esm_dict["EXCH"])
507
505
  buttons_to_send.append(self.esm_dict["EXCH"])
508
506
  buttons_to_send.append("LOGIT")
509
- else:
510
- self.make_button_green(self.esm_dict["AGN"])
511
- buttons_to_send.append(self.esm_dict["AGN"])
507
+
512
508
  if with_enter is True and bool(len(buttons_to_send)):
513
509
  for button in buttons_to_send:
514
510
  if button:
@@ -516,3 +512,14 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
516
512
  self.save_contact()
517
513
  continue
518
514
  self.process_function_key(button)
515
+
516
+
517
+ def check_call_history(self):
518
+ """"""
519
+ result = self.database.fetch_call_history(self.callsign.text())
520
+ if result:
521
+ self.history_info.setText(f"{result.get('UserText','')}")
522
+ if self.other_1.text() == "":
523
+ self.other_1.setText(f"{result.get('Name', '')}")
524
+ if self.other_2.text() == "":
525
+ self.other_2.setText(f"{result.get('Exch1', '')}")
@@ -349,7 +349,7 @@ def cabrillo(self, file_encoding):
349
349
  logger.debug("%s", filename)
350
350
  log = self.database.fetch_all_contacts_asc()
351
351
  try:
352
- with open(filename, "w", encoding="utf-8") as file_descriptor:
352
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
353
353
  output_cabrillo_line(
354
354
  "START-OF-LOG: 3.0",
355
355
  "\r\n",
@@ -522,3 +522,104 @@ def cabrillo(self, file_encoding):
522
522
  logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
523
523
  self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
524
524
  return
525
+
526
+
527
+ def check_call_history(self):
528
+ """"""
529
+ result = self.database.fetch_call_history(self.callsign.text())
530
+ print(f"{result=}")
531
+ if result:
532
+ self.history_info.setText(f"{result.get('UserText','')}")
533
+ if self.other_2.text() == "":
534
+ self.other_2.setText(f"{result.get('Exch1', '')}")
535
+
536
+
537
+ def process_esm(self, new_focused_widget=None, with_enter=False):
538
+ """ESM State Machine"""
539
+
540
+ # self.pref["run_state"]
541
+
542
+ # -----===== Assigned F-Keys =====-----
543
+ # self.esm_dict["CQ"]
544
+ # self.esm_dict["EXCH"]
545
+ # self.esm_dict["QRZ"]
546
+ # self.esm_dict["AGN"]
547
+ # self.esm_dict["HISCALL"]
548
+ # self.esm_dict["MYCALL"]
549
+ # self.esm_dict["QSOB4"]
550
+
551
+ # ----==== text fields ====----
552
+ # self.callsign
553
+ # self.sent
554
+ # self.receive
555
+ # self.other_1
556
+ # self.other_2
557
+
558
+ if new_focused_widget is not None:
559
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
560
+
561
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
562
+
563
+ for a_button in [
564
+ self.esm_dict["CQ"],
565
+ self.esm_dict["EXCH"],
566
+ self.esm_dict["QRZ"],
567
+ self.esm_dict["AGN"],
568
+ self.esm_dict["HISCALL"],
569
+ self.esm_dict["MYCALL"],
570
+ self.esm_dict["QSOB4"],
571
+ ]:
572
+ if a_button is not None:
573
+ self.restore_button_color(a_button)
574
+
575
+ buttons_to_send = []
576
+
577
+ if self.pref.get("run_state"):
578
+ if self.current_widget == "callsign":
579
+ if len(self.callsign.text()) < 3:
580
+ self.make_button_green(self.esm_dict["CQ"])
581
+ buttons_to_send.append(self.esm_dict["CQ"])
582
+ elif len(self.callsign.text()) > 2:
583
+ self.make_button_green(self.esm_dict["HISCALL"])
584
+ self.make_button_green(self.esm_dict["EXCH"])
585
+ buttons_to_send.append(self.esm_dict["HISCALL"])
586
+ buttons_to_send.append(self.esm_dict["EXCH"])
587
+
588
+ elif self.current_widget == "other_2":
589
+ if self.other_2.text() == "":
590
+ self.make_button_green(self.esm_dict["AGN"])
591
+ buttons_to_send.append(self.esm_dict["AGN"])
592
+ else:
593
+ self.make_button_green(self.esm_dict["QRZ"])
594
+ buttons_to_send.append(self.esm_dict["QRZ"])
595
+ buttons_to_send.append("LOGIT")
596
+
597
+ if with_enter is True and bool(len(buttons_to_send)):
598
+ for button in buttons_to_send:
599
+ if button:
600
+ if button == "LOGIT":
601
+ self.save_contact()
602
+ continue
603
+ self.process_function_key(button)
604
+ else:
605
+ if self.current_widget == "callsign":
606
+ if len(self.callsign.text()) > 2:
607
+ self.make_button_green(self.esm_dict["MYCALL"])
608
+ buttons_to_send.append(self.esm_dict["MYCALL"])
609
+
610
+ elif self.current_widget == "other_2":
611
+ if self.other_2.text() == "":
612
+ self.make_button_green(self.esm_dict["AGN"])
613
+ buttons_to_send.append(self.esm_dict["AGN"])
614
+ else:
615
+ self.make_button_green(self.esm_dict["EXCH"])
616
+ buttons_to_send.append(self.esm_dict["EXCH"])
617
+ buttons_to_send.append("LOGIT")
618
+
619
+ if with_enter is True and bool(len(buttons_to_send)):
620
+ for button in buttons_to_send:
621
+ if button:
622
+ if button == "LOGIT":
623
+ self.save_contact()
624
+ continue
625
+ self.process_function_key(button)
@@ -256,7 +256,7 @@ def cabrillo(self, file_encoding):
256
256
  logger.debug("%s", filename)
257
257
  log = self.database.fetch_all_contacts_asc()
258
258
  try:
259
- with open(filename, "w", encoding="utf-8") as file_descriptor:
259
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
260
260
  output_cabrillo_line(
261
261
  "START-OF-LOG: 3.0",
262
262
  "\r\n",
@@ -256,7 +256,7 @@ def cabrillo(self, file_encoding):
256
256
  logger.debug("%s", filename)
257
257
  log = self.database.fetch_all_contacts_asc()
258
258
  try:
259
- with open(filename, "w", encoding="utf-8") as file_descriptor:
259
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
260
260
  output_cabrillo_line(
261
261
  "START-OF-LOG: 3.0",
262
262
  "\r\n",
@@ -213,7 +213,7 @@ def cabrillo(self, file_encoding):
213
213
  logger.debug("%s", filename)
214
214
  log = self.database.fetch_all_contacts_asc()
215
215
  try:
216
- with open(filename, "w", encoding="utf-8") as file_descriptor:
216
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
217
217
  output_cabrillo_line(
218
218
  "START-OF-LOG: 3.0",
219
219
  "\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="utf-8") as file_descriptor:
212
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
213
213
  output_cabrillo_line(
214
214
  "START-OF-LOG: 3.0",
215
215
  "\r\n",
@@ -272,7 +272,7 @@ def cabrillo(self, file_encoding):
272
272
  mults = show_mults(self)
273
273
  log = self.database.fetch_all_contacts_asc()
274
274
  try:
275
- with open(filename, "w", encoding="utf-8") as file_descriptor:
275
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
276
276
  output_cabrillo_line(
277
277
  "START-OF-LOG: 2.0", "\r\n", file_descriptor, file_encoding
278
278
  )
@@ -243,7 +243,7 @@ def cabrillo(self, file_encoding):
243
243
  mults = show_mults(self)
244
244
  log = self.database.fetch_all_contacts_asc()
245
245
  try:
246
- with open(filename, "w", encoding="utf-8") as file_descriptor:
246
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
247
247
  output_cabrillo_line(
248
248
  "START-OF-LOG: 2.0", "\r\n", file_descriptor, file_encoding
249
249
  )