not1mm 24.11.19__tar.gz → 24.11.23__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 (177) hide show
  1. {not1mm-24.11.19 → not1mm-24.11.23}/PKG-INFO +4 -3
  2. {not1mm-24.11.19 → not1mm-24.11.23}/README.md +3 -2
  3. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/__main__.py +59 -62
  4. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/donors.html +1 -0
  5. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/cat_interface.py +16 -1
  6. not1mm-24.11.23/not1mm/lib/version.py +3 -0
  7. not1mm-24.11.23/not1mm/plugins/general_logging.py +241 -0
  8. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/PKG-INFO +4 -3
  9. {not1mm-24.11.19 → not1mm-24.11.23}/pyproject.toml +1 -1
  10. not1mm-24.11.19/not1mm/lib/version.py +0 -3
  11. not1mm-24.11.19/not1mm/plugins/general_logging.py +0 -128
  12. {not1mm-24.11.19 → not1mm-24.11.23}/LICENSE +0 -0
  13. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/__init__.py +0 -0
  14. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/bandmap.py +0 -0
  15. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/checkwindow.py +0 -0
  16. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  17. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/about.ui +0 -0
  19. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/check.png +0 -0
  22. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/configuration.ui +0 -0
  24. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/contests.sql +0 -0
  25. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/cty.json +0 -0
  26. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/cwmacros.txt +0 -0
  27. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/editcontact.ui +0 -0
  28. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/editmacro.ui +0 -0
  29. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/greendot.png +0 -0
  30. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte-not1mm.desktop +0 -0
  31. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-128.png +0 -0
  32. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-32.png +0 -0
  33. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-64.png +0 -0
  34. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/logwindow.ui +0 -0
  35. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/logwindowx.ui +0 -0
  36. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/main.ui +0 -0
  37. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/new_contest.ui +0 -0
  38. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/not1mm.html +0 -0
  39. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/opon.ui +0 -0
  40. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/0.wav +0 -0
  41. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/1.wav +0 -0
  42. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/2.wav +0 -0
  43. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/3.wav +0 -0
  44. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/4.wav +0 -0
  45. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/5.wav +0 -0
  46. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/6.wav +0 -0
  47. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/7.wav +0 -0
  48. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/73.wav +0 -0
  49. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/8.wav +0 -0
  50. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/9.wav +0 -0
  51. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/a.wav +0 -0
  52. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/again.wav +0 -0
  53. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/b.wav +0 -0
  54. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/c.wav +0 -0
  55. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/contest.wav +0 -0
  56. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/cq.wav +0 -0
  57. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/cq2.wav +0 -0
  58. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/d.wav +0 -0
  59. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/e.wav +0 -0
  60. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/f.wav +0 -0
  61. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/g.wav +0 -0
  62. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/h.wav +0 -0
  63. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/i.wav +0 -0
  64. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/j.wav +0 -0
  65. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/k.wav +0 -0
  66. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/k6gte.wav +0 -0
  67. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/l.wav +0 -0
  68. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/m.wav +0 -0
  69. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/mynumber.wav +0 -0
  70. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/n.wav +0 -0
  71. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/nil.wav +0 -0
  72. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/o.wav +0 -0
  73. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/p.wav +0 -0
  74. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/q.wav +0 -0
  75. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/r.wav +0 -0
  76. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/roger.wav +0 -0
  77. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/s.wav +0 -0
  78. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/space.wav +0 -0
  79. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/t.wav +0 -0
  80. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/thankyou.wav +0 -0
  81. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  82. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/u.wav +0 -0
  83. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/v.wav +0 -0
  84. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/w.wav +0 -0
  85. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/x.wav +0 -0
  86. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/y.wav +0 -0
  87. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/yourcall.wav +0 -0
  88. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/z.wav +0 -0
  89. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/pickcontest.ui +0 -0
  90. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_green.png +0 -0
  91. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_grey.png +0 -0
  92. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_red.png +0 -0
  93. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/reddot.png +0 -0
  94. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/rttymacros.txt +0 -0
  95. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/settings.ui +0 -0
  96. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/splash.png +0 -0
  97. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/ssbmacros.txt +0 -0
  98. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/vfo.ui +0 -0
  99. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/fsutils.py +0 -0
  100. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/__init__.py +0 -0
  101. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/about.py +0 -0
  102. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/cwinterface.py +0 -0
  103. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/database.py +0 -0
  104. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_contact.py +0 -0
  105. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_macro.py +0 -0
  106. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_opon.py +0 -0
  107. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_station.py +0 -0
  108. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/fldigi_sendstring.py +0 -0
  109. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/fldigi_watcher.py +0 -0
  110. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/ft8_watcher.py +0 -0
  111. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/ham_utility.py +0 -0
  112. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/lookup.py +0 -0
  113. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/multicast.py +0 -0
  114. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/n1mm.py +0 -0
  115. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/new_contest.py +0 -0
  116. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/plugin_common.py +0 -0
  117. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/select_contest.py +0 -0
  118. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/settings.py +0 -0
  119. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/super_check_partial.py +0 -0
  120. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/versiontest.py +0 -0
  121. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/logwindow.py +0 -0
  122. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lookupservice.py +0 -0
  123. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_fall_cw.py +0 -0
  124. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_spring_cw.py +0 -0
  125. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_summer_phone.py +0 -0
  126. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_winter_phone.py +0 -0
  127. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/__init__.py +0 -0
  128. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_10m.py +0 -0
  129. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_dx_cw.py +0 -0
  130. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  131. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_field_day.py +0 -0
  132. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  133. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_ss_cw.py +0 -0
  134. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_ss_phone.py +0 -0
  135. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  136. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  137. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  138. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/canada_day.py +0 -0
  139. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_160_cw.py +0 -0
  140. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_160_ssb.py +0 -0
  141. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_cw.py +0 -0
  142. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  143. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  144. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_cw.py +0 -0
  145. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_rtty.py +0 -0
  146. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_ssb.py +0 -0
  147. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cwt.py +0 -0
  148. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/darc_xmas.py +0 -0
  149. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/helvetia.py +0 -0
  150. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  151. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  152. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_hf.py +0 -0
  153. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/icwc_mst.py +0 -0
  154. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/jidx_cw.py +0 -0
  155. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/jidx_ph.py +0 -0
  156. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/k1usn_sst.py +0 -0
  157. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/lz-dx.py +0 -0
  158. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_cw.py +0 -0
  159. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_rtty.py +0 -0
  160. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_ssb.py +0 -0
  161. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/phone_weekly_test.py +0 -0
  162. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/raem.py +0 -0
  163. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/ref_cw.py +0 -0
  164. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/ref_ssb.py +0 -0
  165. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/stew_perry_topband.py +0 -0
  166. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/weekly_rtty.py +0 -0
  167. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/winter_field_day.py +0 -0
  168. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/radio.py +0 -0
  169. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/test.py +0 -0
  170. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/vfo.py +0 -0
  171. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/voice_keying.py +0 -0
  172. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/SOURCES.txt +0 -0
  173. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/dependency_links.txt +0 -0
  174. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/entry_points.txt +0 -0
  175. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/requires.txt +0 -0
  176. {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/top_level.txt +0 -0
  177. {not1mm-24.11.19 → not1mm-24.11.23}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.19
3
+ Version: 24.11.23
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
@@ -205,7 +205,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
205
205
 
206
206
  ## List of should be working contests, those in bold have ESM
207
207
 
208
- - General Logging (There are better general loggers like QLog, KLog, CQRLog)
208
+ - **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
209
209
  - 10 10 Fall CW
210
210
  - 10 10 Spring CW
211
211
  - 10 10 Summer Phone
@@ -238,6 +238,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
238
238
 
239
239
  ## Recent Changes (Polishing the Turd)
240
240
 
241
+ - [24-11-23] Made macros per contest.
242
+ - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
241
243
  - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
242
244
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
243
245
  - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
@@ -953,7 +955,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
953
955
 
954
956
  Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
955
957
 
956
-
957
958
  ## Contest specific notes
958
959
 
959
960
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -174,7 +174,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
174
174
 
175
175
  ## List of should be working contests, those in bold have ESM
176
176
 
177
- - General Logging (There are better general loggers like QLog, KLog, CQRLog)
177
+ - **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
178
178
  - 10 10 Fall CW
179
179
  - 10 10 Spring CW
180
180
  - 10 10 Summer Phone
@@ -207,6 +207,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
207
207
 
208
208
  ## Recent Changes (Polishing the Turd)
209
209
 
210
+ - [24-11-23] Made macros per contest.
211
+ - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
210
212
  - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
211
213
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
212
214
  - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
@@ -922,7 +924,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
922
924
 
923
925
  Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
924
926
 
925
-
926
927
  ## Contest specific notes
927
928
 
928
929
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -256,7 +256,7 @@ class MainWindow(QtWidgets.QMainWindow):
256
256
  self.actionNew_Database.triggered.connect(self.new_database)
257
257
  self.actionOpen_Database.triggered.connect(self.open_database)
258
258
 
259
- self.actionEdit_Macros.triggered.connect(self.edit_cw_macros)
259
+ self.actionEdit_Macros.triggered.connect(self.edit_macros)
260
260
 
261
261
  self.actionAbout.triggered.connect(self.show_about_dialog)
262
262
  self.actionHotKeys.triggered.connect(self.show_key_help)
@@ -659,7 +659,7 @@ class MainWindow(QtWidgets.QMainWindow):
659
659
  self.show_splash_msg("Loading contest.")
660
660
  self.load_contest()
661
661
  self.show_splash_msg("Reading macros.")
662
- self.read_cw_macros()
662
+ self.read_macros()
663
663
 
664
664
  self.show_splash_msg("Starting FlDigi watcher.")
665
665
  self.fldigi_watcher = FlDigiWatcher()
@@ -1627,6 +1627,7 @@ class MainWindow(QtWidgets.QMainWindow):
1627
1627
  cmd["COLUMNS"] = self.contest.columns
1628
1628
  if self.log_window:
1629
1629
  self.log_window.msg_from_main(cmd)
1630
+ self.read_macros()
1630
1631
 
1631
1632
  def check_for_new_cty(self) -> None:
1632
1633
  """
@@ -1971,6 +1972,8 @@ class MainWindow(QtWidgets.QMainWindow):
1971
1972
  if self.pref.get("cwtype") == 3 and self.rig_control is not None:
1972
1973
  if self.rig_control.interface == "flrig":
1973
1974
  self.rig_control.cat.set_flrig_cw_speed(self.cw_speed.value())
1975
+ elif self.rig_control.interface == "rigctld":
1976
+ self.rig_control.cat.set_rigctl_cw_speed(self.cw_speed.value())
1974
1977
 
1975
1978
  def stop_cw(self):
1976
1979
  """"""
@@ -2802,7 +2805,7 @@ class MainWindow(QtWidgets.QMainWindow):
2802
2805
  """
2803
2806
  self.pref["run_state"] = self.radioButton_run.isChecked()
2804
2807
  self.write_preference()
2805
- self.read_cw_macros()
2808
+ self.read_macros()
2806
2809
  self.check_esm()
2807
2810
 
2808
2811
  def write_preference(self) -> None:
@@ -3349,7 +3352,7 @@ class MainWindow(QtWidgets.QMainWindow):
3349
3352
  self.set_band_indicator(band)
3350
3353
  self.set_window_title()
3351
3354
  self.clearinputs()
3352
- self.read_cw_macros()
3355
+ self.read_macros()
3353
3356
  return
3354
3357
  if mode in (
3355
3358
  "DIGI-U",
@@ -3370,7 +3373,7 @@ class MainWindow(QtWidgets.QMainWindow):
3370
3373
  self.set_band_indicator(band)
3371
3374
  self.set_window_title()
3372
3375
  self.clearinputs()
3373
- self.read_cw_macros()
3376
+ self.read_macros()
3374
3377
  return
3375
3378
  if mode == "SSB":
3376
3379
  if intended_freq:
@@ -3391,7 +3394,7 @@ class MainWindow(QtWidgets.QMainWindow):
3391
3394
  self.set_band_indicator(band)
3392
3395
  self.set_window_title()
3393
3396
  self.clearinputs()
3394
- self.read_cw_macros()
3397
+ self.read_macros()
3395
3398
 
3396
3399
  def check_callsign(self, callsign) -> None:
3397
3400
  """
@@ -3478,7 +3481,7 @@ class MainWindow(QtWidgets.QMainWindow):
3478
3481
  self.current_mode = "CW"
3479
3482
  self.sent.setText("599")
3480
3483
  self.receive.setText("599")
3481
- self.read_cw_macros()
3484
+ self.read_macros()
3482
3485
  if self.contest:
3483
3486
  if self.contest.name == "ICWC Medium Speed Test":
3484
3487
  self.contest.prefill(self)
@@ -3488,14 +3491,14 @@ class MainWindow(QtWidgets.QMainWindow):
3488
3491
  self.current_mode = "SSB"
3489
3492
  self.sent.setText("59")
3490
3493
  self.receive.setText("59")
3491
- self.read_cw_macros()
3494
+ self.read_macros()
3492
3495
  return
3493
3496
  if mode in ("RTTY", "DIGI-U", "DIGI-L"):
3494
3497
  if self.current_mode != "RTTY":
3495
3498
  self.current_mode = "RTTY"
3496
3499
  self.sent.setText("599")
3497
3500
  self.receive.setText("599")
3498
- self.read_cw_macros()
3501
+ self.read_macros()
3499
3502
 
3500
3503
  def get_opon(self) -> None:
3501
3504
  """
@@ -3662,18 +3665,13 @@ class MainWindow(QtWidgets.QMainWindow):
3662
3665
  except TypeError as err:
3663
3666
  logger.debug(f"{err=} {vfo=} {the_dict=}")
3664
3667
 
3665
- def edit_cw_macros(self) -> None:
3666
- """
3667
- Calls the default text editor to edit the CW macro file.
3668
-
3669
- Parameters
3670
- ----------
3671
- None
3672
-
3673
- Returns
3674
- -------
3675
- None
3676
- """
3668
+ def get_macro_filename(self):
3669
+ """"""
3670
+ # Have not1mm check in USER_DATA_PATH for the existence of a folder with the contests name.
3671
+ # If it exists, check to see if a cw/ssb/rtty macro files exists within it and load them before
3672
+ # falling back to the default ones.
3673
+ # If user selects menu option to edit the current macro file, make the previous checks, if the
3674
+ # specific one does not exist, copy the default to the contest directory and edit that copy.
3677
3675
  if self.radio_state.get("mode") in ("CW", "CW-L", "CW-R", "CWR"):
3678
3676
  macro_file = "cwmacros.txt"
3679
3677
  elif self.radio_state.get("mode") in (
@@ -3693,8 +3691,14 @@ class MainWindow(QtWidgets.QMainWindow):
3693
3691
  macro_file = "rttymacros.txt"
3694
3692
  else:
3695
3693
  macro_file = "ssbmacros.txt"
3694
+
3695
+ try:
3696
+ if not (fsutils.USER_DATA_PATH / self.contest.name).exists():
3697
+ os.mkdir(fsutils.USER_DATA_PATH / self.contest.name)
3698
+ except AttributeError:
3699
+ return ""
3700
+
3696
3701
  if not (fsutils.USER_DATA_PATH / macro_file).exists():
3697
- logger.debug("copying default macro file.")
3698
3702
  try:
3699
3703
  copyfile(
3700
3704
  fsutils.APP_DATA_PATH / macro_file,
@@ -3702,57 +3706,50 @@ class MainWindow(QtWidgets.QMainWindow):
3702
3706
  )
3703
3707
  except IOError as err:
3704
3708
  logger.critical(f"Error {err} copying macro file.")
3709
+
3710
+ if not (fsutils.USER_DATA_PATH / self.contest.name / macro_file).exists():
3711
+ try:
3712
+ copyfile(
3713
+ fsutils.APP_DATA_PATH / macro_file,
3714
+ fsutils.USER_DATA_PATH / self.contest.name / macro_file,
3715
+ )
3716
+ except IOError as err:
3717
+ logger.critical(f"Error {err} copying macro file.")
3718
+
3719
+ return fsutils.USER_DATA_PATH / self.contest.name / macro_file
3720
+
3721
+ def edit_macros(self) -> None:
3722
+ """
3723
+ Calls the default text editor to edit the CW macro file.
3724
+
3725
+ Parameters
3726
+ ----------
3727
+ None
3728
+
3729
+ Returns
3730
+ -------
3731
+ None
3732
+ """
3733
+
3734
+ macro_file = self.get_macro_filename()
3735
+
3705
3736
  try:
3706
- fsutils.openFileWithOS(fsutils.USER_DATA_PATH / macro_file)
3737
+ fsutils.openFileWithOS(macro_file)
3707
3738
  except FileNotFoundError | PermissionError | OSError as err:
3708
- logger.critical(
3709
- f"Could not open file {fsutils.USER_DATA_PATH / macro_file} {err}"
3710
- )
3711
- self.read_cw_macros()
3739
+ logger.critical(f"Could not open file {macro_file} {err}")
3740
+ self.read_macros()
3712
3741
 
3713
- def read_cw_macros(self) -> None:
3742
+ def read_macros(self) -> None:
3714
3743
  """
3715
3744
  Reads in the CW macros, firsts it checks to see if the file exists. If it does not,
3716
3745
  and this has been packaged with pyinstaller it will copy the default file from the
3717
3746
  temp directory this is running from... In theory.
3718
3747
  """
3719
3748
 
3720
- if self.radio_state.get("mode") in (
3721
- "CW",
3722
- "CW-L",
3723
- "CW-R",
3724
- ):
3725
- macro_file = "cwmacros.txt"
3726
- elif self.radio_state.get("mode") in (
3727
- "RTTY",
3728
- "RTTY-R",
3729
- "LSB-D",
3730
- "USB-D",
3731
- "AM-D",
3732
- "FM-D",
3733
- "DIGI-U",
3734
- "DIGI-L",
3735
- "RTTYR",
3736
- "PKTLSB",
3737
- "PKTUSB",
3738
- ):
3739
- macro_file = "rttymacros.txt"
3740
- else:
3741
- macro_file = "ssbmacros.txt"
3749
+ macro_file = self.get_macro_filename()
3742
3750
 
3743
- if not (fsutils.USER_DATA_PATH / macro_file).exists():
3744
- logger.debug("copying default macro file.")
3745
- try:
3746
- copyfile(
3747
- fsutils.APP_DATA_PATH / macro_file,
3748
- fsutils.USER_DATA_PATH / macro_file,
3749
- )
3750
- except IOError as err:
3751
- logger.critical(f"Error {err} copying macro file.")
3752
3751
  try:
3753
- with open(
3754
- fsutils.USER_DATA_PATH / macro_file, "r", encoding="utf-8"
3755
- ) as file_descriptor:
3752
+ with open(macro_file, "r", encoding="utf-8") as file_descriptor:
3756
3753
  for line in file_descriptor:
3757
3754
  mode, fkey, buttonname, cwtext = line.split("|")
3758
3755
  if mode.strip().upper() == "R" and self.pref.get("run_state"):
@@ -3,6 +3,7 @@
3
3
  <center>Donors</center>
4
4
  </h2>
5
5
  <hr />
6
+ <center>Adrian VA3NB</center>
6
7
  <center>Brian KB3ORR</center>
7
8
  <center>Connor KD9LSV</center>
8
9
 
@@ -9,7 +9,7 @@ rig.cwio_send n:i cwio transmit 1/0 (on/off)
9
9
  command lines to test the CW API via XMLRPC
10
10
 
11
11
  Setting WPM
12
- curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
12
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
13
13
 
14
14
  Setting the text to send
15
15
  curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
@@ -178,6 +178,21 @@ class CAT:
178
178
  self.__initialize_rigctrld()
179
179
  return False
180
180
 
181
+ def set_rigctl_cw_speed(self, speed):
182
+ """Set CW speed via rigctld"""
183
+ if self.rigctrlsocket:
184
+ try:
185
+ self.online = True
186
+ self.rigctrlsocket.send(bytes(f"L KEYSPD {speed}\n", "utf-8"))
187
+ _ = self.__get_serial_string()
188
+ return
189
+ except socket.error as exception:
190
+ self.online = False
191
+ logger.debug("set_level_rigctld: %s", f"{exception}")
192
+ self.rigctrlsocket = None
193
+ return
194
+ self.__initialize_rigctrld()
195
+
181
196
  def sendcwxmlrpc(self, texttosend):
182
197
  """Add text to flrig's cw send buffer."""
183
198
  logger.debug(f"{texttosend=}")
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.11.23"
@@ -0,0 +1,241 @@
1
+ """General Logging plugin"""
2
+
3
+ # pylint: disable=invalid-name, unused-argument, unused-variable, c-extension-no-member, unused-import
4
+
5
+ import logging
6
+
7
+ from PyQt6 import QtWidgets
8
+
9
+ from not1mm.lib.plugin_common import gen_adif, get_points
10
+ from not1mm.lib.version import __version__
11
+
12
+ logger = logging.getLogger(__name__)
13
+ EXCHANGE_HINT = ""
14
+ name = "General Logging"
15
+ cabrillo_name = "General-Logging"
16
+ mode = "BOTH" # CW SSB BOTH RTTY
17
+ columns = [0, 1, 2, 3, 4, 16, 17]
18
+ columns = [
19
+ "YYYY-MM-DD HH:MM:SS",
20
+ "Call",
21
+ "Freq",
22
+ "Mode",
23
+ "Snt",
24
+ "Rcv",
25
+ "Name",
26
+ "Comment",
27
+ ]
28
+
29
+ # 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
30
+ dupe_type = 4
31
+
32
+
33
+ def init_contest(self):
34
+ """setup plugin"""
35
+ set_tab_next(self)
36
+ set_tab_prev(self)
37
+ interface(self)
38
+ self.next_field = self.other_1
39
+
40
+
41
+ def interface(self):
42
+ """Setup user interface"""
43
+ self.field1.show()
44
+ self.field2.show()
45
+ self.field3.show()
46
+ self.field4.show()
47
+ self.snt_label.setText("SNT")
48
+ self.field1.setAccessibleName("RST Sent")
49
+ self.other_label.setText("Name")
50
+ self.field3.setAccessibleName("Name")
51
+ self.exch_label.setText("Comment")
52
+ self.field4.setAccessibleName("Comment")
53
+
54
+
55
+ def reset_label(self):
56
+ """reset label after field cleared"""
57
+
58
+
59
+ def set_tab_next(self):
60
+ """Set TAB Advances"""
61
+ self.tab_next = {
62
+ self.callsign: self.sent,
63
+ self.sent: self.receive,
64
+ self.receive: self.other_1,
65
+ self.other_1: self.other_2,
66
+ self.other_2: self.callsign,
67
+ }
68
+
69
+
70
+ def set_tab_prev(self):
71
+ """Set TAB Advances"""
72
+ self.tab_prev = {
73
+ self.callsign: self.other_2,
74
+ self.sent: self.callsign,
75
+ self.receive: self.sent,
76
+ self.other_1: self.receive,
77
+ self.other_2: self.other_1,
78
+ }
79
+
80
+
81
+ def set_contact_vars(self):
82
+ """Contest Specific"""
83
+ self.contact["SNT"] = self.sent.text()
84
+ self.contact["RCV"] = self.receive.text()
85
+ self.contact["Name"] = self.other_1.text()
86
+ self.contact["Comment"] = self.other_2.text()
87
+
88
+
89
+ def predupe(self):
90
+ """called after callsign entered"""
91
+
92
+
93
+ def prefill(self):
94
+ """Fill SentNR"""
95
+
96
+
97
+ def points(self):
98
+ """Calc point"""
99
+
100
+
101
+ def show_mults(self):
102
+ """Return display string for mults"""
103
+
104
+
105
+ def show_qso(self):
106
+ """Return qso count"""
107
+ result = self.database.fetch_qso_count()
108
+ if result:
109
+ return int(result.get("qsos", 0))
110
+ return 0
111
+
112
+
113
+ def calc_score(self):
114
+ """Return calculated score"""
115
+ result = self.database.fetch_points()
116
+
117
+
118
+ def adif(self):
119
+ """Call the generate ADIF function"""
120
+ gen_adif(self, cabrillo_name)
121
+
122
+
123
+ def cabrillo(self, file_encoding):
124
+ """Generates Cabrillo file. Maybe."""
125
+
126
+
127
+ def recalculate_mults(self):
128
+ """Recalculates multipliers after change in logged qso."""
129
+
130
+
131
+ def process_esm(self, new_focused_widget=None, with_enter=False):
132
+ """ESM State Machine"""
133
+
134
+ # self.pref["run_state"]
135
+
136
+ # -----===== Assigned F-Keys =====-----
137
+ # self.esm_dict["CQ"]
138
+ # self.esm_dict["EXCH"]
139
+ # self.esm_dict["QRZ"]
140
+ # self.esm_dict["AGN"]
141
+ # self.esm_dict["HISCALL"]
142
+ # self.esm_dict["MYCALL"]
143
+ # self.esm_dict["QSOB4"]
144
+
145
+ # ----==== text fields ====----
146
+ # self.callsign
147
+ # self.sent
148
+ # self.receive
149
+ # self.other_1
150
+ # self.other_2
151
+
152
+ if new_focused_widget is not None:
153
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
154
+
155
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
156
+
157
+ for a_button in [
158
+ self.F1,
159
+ self.F2,
160
+ self.F3,
161
+ self.F4,
162
+ self.F5,
163
+ self.F6,
164
+ self.F7,
165
+ self.F8,
166
+ self.F9,
167
+ self.F10,
168
+ self.F11,
169
+ self.F12,
170
+ ]:
171
+ self.restore_button_color(a_button)
172
+
173
+ buttons_to_send = []
174
+
175
+ if self.pref.get("run_state"):
176
+ if self.current_widget == "callsign":
177
+ if len(self.callsign.text()) < 3:
178
+ self.make_button_green(self.esm_dict["CQ"])
179
+ buttons_to_send.append(self.esm_dict["CQ"])
180
+ elif len(self.callsign.text()) > 2:
181
+ self.make_button_green(self.esm_dict["HISCALL"])
182
+ self.make_button_green(self.esm_dict["EXCH"])
183
+ buttons_to_send.append(self.esm_dict["HISCALL"])
184
+ buttons_to_send.append(self.esm_dict["EXCH"])
185
+
186
+ elif self.current_widget in ["other_1", "other_2"]:
187
+ if self.other_2.text() == "" and self.other_1.text() == "":
188
+ self.make_button_green(self.esm_dict["AGN"])
189
+ buttons_to_send.append(self.esm_dict["AGN"])
190
+ else:
191
+ self.make_button_green(self.esm_dict["QRZ"])
192
+ buttons_to_send.append(self.esm_dict["QRZ"])
193
+ buttons_to_send.append("LOGIT")
194
+
195
+ if with_enter is True and bool(len(buttons_to_send)):
196
+ for button in buttons_to_send:
197
+ if button:
198
+ if button == "LOGIT":
199
+ self.save_contact()
200
+ continue
201
+ self.process_function_key(button)
202
+ else:
203
+ if self.current_widget == "callsign":
204
+ if len(self.callsign.text()) > 2:
205
+ self.make_button_green(self.esm_dict["MYCALL"])
206
+ buttons_to_send.append(self.esm_dict["MYCALL"])
207
+
208
+ elif self.current_widget in ["other_1", "other_2"]:
209
+ if self.other_2.text() == "" and self.other_1.text() == "":
210
+ self.make_button_green(self.esm_dict["AGN"])
211
+ buttons_to_send.append(self.esm_dict["AGN"])
212
+ else:
213
+ self.make_button_green(self.esm_dict["EXCH"])
214
+ buttons_to_send.append(self.esm_dict["EXCH"])
215
+ buttons_to_send.append("LOGIT")
216
+ if with_enter is True and bool(len(buttons_to_send)):
217
+ for button in buttons_to_send:
218
+ if button:
219
+ if button == "LOGIT":
220
+ self.save_contact()
221
+ continue
222
+ self.process_function_key(button)
223
+
224
+
225
+ def populate_history_info_line(self):
226
+ result = self.database.fetch_call_history(self.callsign.text())
227
+ if result:
228
+ self.history_info.setText(
229
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('UserText','...')}"
230
+ )
231
+ else:
232
+ self.history_info.setText("")
233
+
234
+
235
+ def check_call_history(self):
236
+ """"""
237
+ result = self.database.fetch_call_history(self.callsign.text())
238
+ if result:
239
+ self.history_info.setText(f"{result.get('UserText','')}")
240
+ if self.other_1.text() == "":
241
+ self.other_1.setText(f"{result.get('Name', '')}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.19
3
+ Version: 24.11.23
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
@@ -205,7 +205,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
205
205
 
206
206
  ## List of should be working contests, those in bold have ESM
207
207
 
208
- - General Logging (There are better general loggers like QLog, KLog, CQRLog)
208
+ - **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
209
209
  - 10 10 Fall CW
210
210
  - 10 10 Spring CW
211
211
  - 10 10 Summer Phone
@@ -238,6 +238,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
238
238
 
239
239
  ## Recent Changes (Polishing the Turd)
240
240
 
241
+ - [24-11-23] Made macros per contest.
242
+ - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
241
243
  - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
242
244
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
243
245
  - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
@@ -953,7 +955,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
953
955
 
954
956
  Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
955
957
 
956
-
957
958
  ## Contest specific notes
958
959
 
959
960
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.11.19"
7
+ version = "24.11.23"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +0,0 @@
1
- """It's the version"""
2
-
3
- __version__ = "24.11.19"