not1mm 24.12.3.1__tar.gz → 24.12.5.1__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 (178) hide show
  1. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/PKG-INFO +21 -24
  2. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/README.md +20 -23
  3. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/__main__.py +53 -7
  4. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/configuration.ui +70 -0
  5. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/plugin_common.py +63 -3
  6. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/settings.py +22 -0
  7. not1mm-24.12.5.1/not1mm/lib/version.py +3 -0
  8. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lookupservice.py +2 -2
  9. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_160m.py +98 -14
  10. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_ww_cw.py +14 -1
  11. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cwt.py +21 -1
  12. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/icwc_mst.py +21 -1
  13. not1mm-24.12.5.1/not1mm/rtc_service.py +80 -0
  14. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/PKG-INFO +21 -24
  15. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/SOURCES.txt +1 -0
  16. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/pyproject.toml +1 -1
  17. not1mm-24.12.3.1/not1mm/lib/version.py +0 -3
  18. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/LICENSE +0 -0
  19. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/__init__.py +0 -0
  20. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/bandmap.py +0 -0
  21. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/checkwindow.py +0 -0
  22. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  23. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/MASTER.SCP +0 -0
  24. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/about.ui +0 -0
  25. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  26. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/bandmap.ui +0 -0
  27. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/check.png +0 -0
  28. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/checkwindow.ui +0 -0
  29. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/contests.sql +0 -0
  30. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/cty.json +0 -0
  31. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/cwmacros.txt +0 -0
  32. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/donors.html +0 -0
  33. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/editcontact.ui +0 -0
  34. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/editmacro.ui +0 -0
  35. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/greendot.png +0 -0
  36. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
  37. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
  38. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
  39. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
  40. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/logwindow.ui +0 -0
  41. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/logwindowx.ui +0 -0
  42. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/main.ui +0 -0
  43. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/new_contest.ui +0 -0
  44. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/not1mm.html +0 -0
  45. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/opon.ui +0 -0
  46. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/0.wav +0 -0
  47. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/1.wav +0 -0
  48. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/2.wav +0 -0
  49. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/3.wav +0 -0
  50. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/4.wav +0 -0
  51. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/5.wav +0 -0
  52. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/6.wav +0 -0
  53. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/7.wav +0 -0
  54. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/73.wav +0 -0
  55. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/8.wav +0 -0
  56. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/9.wav +0 -0
  57. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/a.wav +0 -0
  58. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/again.wav +0 -0
  59. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/b.wav +0 -0
  60. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/c.wav +0 -0
  61. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/contest.wav +0 -0
  62. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/cq.wav +0 -0
  63. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/cq2.wav +0 -0
  64. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/d.wav +0 -0
  65. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/e.wav +0 -0
  66. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/f.wav +0 -0
  67. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/g.wav +0 -0
  68. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/h.wav +0 -0
  69. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/i.wav +0 -0
  70. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/j.wav +0 -0
  71. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/k.wav +0 -0
  72. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/k6gte.wav +0 -0
  73. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/l.wav +0 -0
  74. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/m.wav +0 -0
  75. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/mynumber.wav +0 -0
  76. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/n.wav +0 -0
  77. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/nil.wav +0 -0
  78. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/o.wav +0 -0
  79. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/p.wav +0 -0
  80. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/q.wav +0 -0
  81. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/r.wav +0 -0
  82. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/roger.wav +0 -0
  83. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/s.wav +0 -0
  84. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/space.wav +0 -0
  85. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/t.wav +0 -0
  86. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/thankyou.wav +0 -0
  87. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  88. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/u.wav +0 -0
  89. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/v.wav +0 -0
  90. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/w.wav +0 -0
  91. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/x.wav +0 -0
  92. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/y.wav +0 -0
  93. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/yourcall.wav +0 -0
  94. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/phonetics/z.wav +0 -0
  95. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/pickcontest.ui +0 -0
  96. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/radio_green.png +0 -0
  97. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/radio_grey.png +0 -0
  98. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/radio_red.png +0 -0
  99. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/reddot.png +0 -0
  100. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/rttymacros.txt +0 -0
  101. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/settings.ui +0 -0
  102. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/splash.png +0 -0
  103. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/ssbmacros.txt +0 -0
  104. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/data/vfo.ui +0 -0
  105. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/fsutils.py +0 -0
  106. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/__init__.py +0 -0
  107. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/about.py +0 -0
  108. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/cat_interface.py +0 -0
  109. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/cwinterface.py +0 -0
  110. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/database.py +0 -0
  111. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/edit_contact.py +0 -0
  112. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/edit_macro.py +0 -0
  113. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/edit_opon.py +0 -0
  114. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/edit_station.py +0 -0
  115. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/fldigi_sendstring.py +0 -0
  116. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/fldigi_watcher.py +0 -0
  117. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/ft8_watcher.py +0 -0
  118. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/ham_utility.py +0 -0
  119. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/lookup.py +0 -0
  120. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/multicast.py +0 -0
  121. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/n1mm.py +0 -0
  122. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/new_contest.py +0 -0
  123. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/select_contest.py +0 -0
  124. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/super_check_partial.py +0 -0
  125. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/lib/versiontest.py +0 -0
  126. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/logwindow.py +0 -0
  127. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/10_10_fall_cw.py +0 -0
  128. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/10_10_spring_cw.py +0 -0
  129. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/10_10_summer_phone.py +0 -0
  130. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/10_10_winter_phone.py +0 -0
  131. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/__init__.py +0 -0
  132. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_10m.py +0 -0
  133. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_dx_cw.py +0 -0
  134. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  135. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_field_day.py +0 -0
  136. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  137. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_ss_cw.py +0 -0
  138. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_ss_phone.py +0 -0
  139. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  140. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  141. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  142. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/canada_day.py +0 -0
  143. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_160_cw.py +0 -0
  144. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_160_ssb.py +0 -0
  145. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_wpx_cw.py +0 -0
  146. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  147. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  148. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_ww_rtty.py +0 -0
  149. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/cq_ww_ssb.py +0 -0
  150. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/darc_xmas.py +0 -0
  151. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/general_logging.py +0 -0
  152. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/helvetia.py +0 -0
  153. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  154. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  155. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/iaru_hf.py +0 -0
  156. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/jidx_cw.py +0 -0
  157. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/jidx_ph.py +0 -0
  158. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/k1usn_sst.py +0 -0
  159. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/lz-dx.py +0 -0
  160. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/naqp_cw.py +0 -0
  161. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/naqp_rtty.py +0 -0
  162. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/naqp_ssb.py +0 -0
  163. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/phone_weekly_test.py +0 -0
  164. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/raem.py +0 -0
  165. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/ref_cw.py +0 -0
  166. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/ref_ssb.py +0 -0
  167. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/stew_perry_topband.py +0 -0
  168. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/weekly_rtty.py +0 -0
  169. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/plugins/winter_field_day.py +0 -0
  170. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/radio.py +0 -0
  171. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/test.py +0 -0
  172. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/vfo.py +0 -0
  173. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm/voice_keying.py +0 -0
  174. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/dependency_links.txt +0 -0
  175. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/entry_points.txt +0 -0
  176. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/requires.txt +0 -0
  177. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/not1mm.egg-info/top_level.txt +0 -0
  178. {not1mm-24.12.3.1 → not1mm-24.12.5.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.12.3.1
3
+ Version: 24.12.5.1
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
@@ -238,6 +238,9 @@ 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-12-5-1] ARRL 160 gets rtc.
242
+ - [24-12-5] Add 'real time' score posting to external sites.
243
+ - [24-12-4] Merged PR from @alduhoo Add STATION_CALLSIGN field to ADIF output
241
244
  - [24-12-3-1] Adding ARRL 160
242
245
  - [24-12-3] Add button to bandmap to delete marked spots.
243
246
 
@@ -532,7 +535,7 @@ You can fill. You can fill. Everyone look at your keys.
532
535
 
533
536
  ### Changing station information
534
537
 
535
- Station information can be changed any time by going toawandahl
538
+ Station information can be changed any time by going to
536
539
  `File` > `Station Settings` and editing the information.
537
540
 
538
541
  ## Selecting a contest (It's REQUIRED Russ)
@@ -585,10 +588,7 @@ onscreen icon for CAT status. Green good, Red bad, Grey neither.
585
588
 
586
589
  Under the `CW` TAB, There are three options. `cwdaemon`, which normally uses IP
587
590
  `127.0.0.1`port `6789`. `pywinkeyer` which normally uses IP `127.0.0.1` port `8000` and
588
- `CAT` which if your radio supports it, sends Morse characters via rigctld. As far
589
- as I can tell rigctld does not support setting the radios internal keyer speed. So
590
- the CW speed control widget will not be functional and you'd need to control the
591
- keyer speed thru the radios interface.
591
+ `CAT` which if your radio supports it, sends Morse characters via rigctld.
592
592
 
593
593
  ### Cluster
594
594
 
@@ -616,27 +616,22 @@ appear. Those without will not.
616
616
 
617
617
  ### Options
618
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.
619
+ On the Options TAB you can:
621
620
 
622
- ![Bands Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
621
+ - Select to use Enter Sends Message (ESM), and configure it's function keys.
622
+ - Select whether or not to use Call History info.
623
+ - Select whether or not to send XML score info to online scoreboards.
623
624
 
624
- ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
625
-
626
- **Digital modes only working for:**
625
+ ![Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
627
626
 
628
- - ARRL Field Day
629
- - ARRL VHF
630
- - Weekly RTTY
631
- - CQ WW DX RTTY
632
- - CQ WPX RTTY
627
+ ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
633
628
 
634
629
  not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
635
630
  No setup is needed to be done on not1mm's side. That's good because I'm lazy.
636
631
 
637
632
  not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
638
633
  way. It just keeps asking what was the last QSO and compares it to the previous response.
639
- If it's different, it's new. I've added the Weekly RTTY Test so this can be tested.
634
+ If it's different, it's new.
640
635
 
641
636
  The F1-F12 function keys be sent to fldigi via XMLRPC. Fldigi will be placed into TX
642
637
  mode, the message will be sent and a ^r will be tacked onto the end to place it back into
@@ -649,18 +644,20 @@ Generic Contest. Make sure the Text Capture Order field says CALL EXCHANGE.
649
644
  ## Sending CW
650
645
 
651
646
  Other than sending CW by hand, you can also send predefined CW text messages by
652
- pressing F1 - F12. See next section on Editing macro keys. If you need to send
653
- something freeform, you can press CTRL-SHIFT-K, this will expose an entry field
654
- at the bottom of the window which you can type directly into. When you're done
655
- you can either press CTRL-SHIFT-K again, or press the Enter Key to close the
656
- field.
647
+ pressing F1 - F12. See next section on Editing macro keys.
648
+
649
+ If you need to send something freeform, you can press `CTRL-SHIFT-K`, this will
650
+ expose an entry field at the bottom of the window which you can type directly into.
651
+ When you're done you can either press CTRL-SHIFT-K again, or press the Enter Key to
652
+ close the field.
657
653
 
658
654
  ## Editing macro keys
659
655
 
660
656
  To edit the macros, choose `File` > `Edit Macros`. This will open your systems
661
657
  registered text editor with current macros loaded. When your done just save the
662
658
  file and close the editor. The file loaded to edit, CW, SSB or RTTY, will be
663
- determined by your current operating mode.
659
+ determined by your current operating mode and contest. Each contest gets it's own
660
+ copy of the macros.
664
661
 
665
662
  After editing and saving the macro file. You can force the logger to reload the
666
663
  macro file by toggeling between `Run` and `S&P` states.
@@ -207,6 +207,9 @@ 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-12-5-1] ARRL 160 gets rtc.
211
+ - [24-12-5] Add 'real time' score posting to external sites.
212
+ - [24-12-4] Merged PR from @alduhoo Add STATION_CALLSIGN field to ADIF output
210
213
  - [24-12-3-1] Adding ARRL 160
211
214
  - [24-12-3] Add button to bandmap to delete marked spots.
212
215
 
@@ -501,7 +504,7 @@ You can fill. You can fill. Everyone look at your keys.
501
504
 
502
505
  ### Changing station information
503
506
 
504
- Station information can be changed any time by going toawandahl
507
+ Station information can be changed any time by going to
505
508
  `File` > `Station Settings` and editing the information.
506
509
 
507
510
  ## Selecting a contest (It's REQUIRED Russ)
@@ -554,10 +557,7 @@ onscreen icon for CAT status. Green good, Red bad, Grey neither.
554
557
 
555
558
  Under the `CW` TAB, There are three options. `cwdaemon`, which normally uses IP
556
559
  `127.0.0.1`port `6789`. `pywinkeyer` which normally uses IP `127.0.0.1` port `8000` and
557
- `CAT` which if your radio supports it, sends Morse characters via rigctld. As far
558
- as I can tell rigctld does not support setting the radios internal keyer speed. So
559
- the CW speed control widget will not be functional and you'd need to control the
560
- keyer speed thru the radios interface.
560
+ `CAT` which if your radio supports it, sends Morse characters via rigctld.
561
561
 
562
562
  ### Cluster
563
563
 
@@ -585,27 +585,22 @@ appear. Those without will not.
585
585
 
586
586
  ### Options
587
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.
588
+ On the Options TAB you can:
590
589
 
591
- ![Bands Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
590
+ - Select to use Enter Sends Message (ESM), and configure it's function keys.
591
+ - Select whether or not to use Call History info.
592
+ - Select whether or not to send XML score info to online scoreboards.
592
593
 
593
- ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
594
-
595
- **Digital modes only working for:**
594
+ ![Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
596
595
 
597
- - ARRL Field Day
598
- - ARRL VHF
599
- - Weekly RTTY
600
- - CQ WW DX RTTY
601
- - CQ WPX RTTY
596
+ ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
602
597
 
603
598
  not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
604
599
  No setup is needed to be done on not1mm's side. That's good because I'm lazy.
605
600
 
606
601
  not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
607
602
  way. It just keeps asking what was the last QSO and compares it to the previous response.
608
- If it's different, it's new. I've added the Weekly RTTY Test so this can be tested.
603
+ If it's different, it's new.
609
604
 
610
605
  The F1-F12 function keys be sent to fldigi via XMLRPC. Fldigi will be placed into TX
611
606
  mode, the message will be sent and a ^r will be tacked onto the end to place it back into
@@ -618,18 +613,20 @@ Generic Contest. Make sure the Text Capture Order field says CALL EXCHANGE.
618
613
  ## Sending CW
619
614
 
620
615
  Other than sending CW by hand, you can also send predefined CW text messages by
621
- pressing F1 - F12. See next section on Editing macro keys. If you need to send
622
- something freeform, you can press CTRL-SHIFT-K, this will expose an entry field
623
- at the bottom of the window which you can type directly into. When you're done
624
- you can either press CTRL-SHIFT-K again, or press the Enter Key to close the
625
- field.
616
+ pressing F1 - F12. See next section on Editing macro keys.
617
+
618
+ If you need to send something freeform, you can press `CTRL-SHIFT-K`, this will
619
+ expose an entry field at the bottom of the window which you can type directly into.
620
+ When you're done you can either press CTRL-SHIFT-K again, or press the Enter Key to
621
+ close the field.
626
622
 
627
623
  ## Editing macro keys
628
624
 
629
625
  To edit the macros, choose `File` > `Edit Macros`. This will open your systems
630
626
  registered text editor with current macros loaded. When your done just save the
631
627
  file and close the editor. The file loaded to edit, CW, SSB or RTTY, will be
632
- determined by your current operating mode.
628
+ determined by your current operating mode and contest. Each contest gets it's own
629
+ copy of the macros.
633
630
 
634
631
  After editing and saving the macro file. You can force the logger to reload the
635
632
  macro file by toggeling between `Run` and `S&P` states.
@@ -77,6 +77,7 @@ from not1mm.vfo import VfoWindow
77
77
  from not1mm.radio import Radio
78
78
  from not1mm.voice_keying import Voice
79
79
  from not1mm.lookupservice import LookupService
80
+ from not1mm.rtc_service import RTCService
80
81
 
81
82
  poll_time = datetime.datetime.now()
82
83
 
@@ -102,6 +103,11 @@ class MainWindow(QtWidgets.QMainWindow):
102
103
  "multicast_group": "239.1.1.1",
103
104
  "multicast_port": 2239,
104
105
  "interface_ip": "0.0.0.0",
106
+ "send_rtc_scores": False,
107
+ "rtc_url": "",
108
+ "rtc_user": "",
109
+ "rtc_pass": "",
110
+ "rtc_interval": 2,
105
111
  "send_n1mm_packets": False,
106
112
  "n1mm_station_name": "20M CW Tent",
107
113
  "n1mm_operator": "Bernie",
@@ -156,7 +162,6 @@ class MainWindow(QtWidgets.QMainWindow):
156
162
  opon_dialog = None
157
163
  dbname = fsutils.USER_DATA_PATH, "/ham.db"
158
164
  radio_state = {}
159
- rig_control = None
160
165
  worked_list = {}
161
166
  cw_entry_visible = False
162
167
  last_focus = None
@@ -170,6 +175,7 @@ class MainWindow(QtWidgets.QMainWindow):
170
175
  radio_thread = QThread()
171
176
  voice_thread = QThread()
172
177
  fldigi_thread = QThread()
178
+ rtc_thread = QThread()
173
179
 
174
180
  fldigi_watcher = None
175
181
  rig_control = None
@@ -179,6 +185,7 @@ class MainWindow(QtWidgets.QMainWindow):
179
185
  vfo_window = None
180
186
  lookup_service = None
181
187
  fldigi_util = None
188
+ rtc_service = None
182
189
 
183
190
  current_widget = None
184
191
 
@@ -604,7 +611,7 @@ class MainWindow(QtWidgets.QMainWindow):
604
611
  logger.debug(f"{QT_VERSION_STR=} {PYQT_VERSION_STR=}")
605
612
  x = PYQT_VERSION_STR.split(".")
606
613
  old_Qt = True
607
- # test if pyqt version is at least 6.7.1
614
+ # test if pyqt version is at least 6.8
608
615
  if len(x) == 1:
609
616
  if int(x[0]) > 6:
610
617
  old_Qt = False
@@ -612,7 +619,7 @@ class MainWindow(QtWidgets.QMainWindow):
612
619
  if int(x[0]) >= 6 and int(x[1]) >= 8:
613
620
  old_Qt = False
614
621
 
615
- # Featureset for wayland if pyqt is older that 6.7.1
622
+ # Featureset for wayland if pyqt is older that 6.8
616
623
  dockfeatures = (
617
624
  QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable
618
625
  | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable
@@ -712,7 +719,7 @@ class MainWindow(QtWidgets.QMainWindow):
712
719
  )
713
720
 
714
721
  def load_call_history(self) -> None:
715
- """"""
722
+ """Display filepicker and load chosen call history file."""
716
723
  filename = self.filepicker("other")
717
724
  if filename:
718
725
  self.database.create_callhistory_table()
@@ -755,13 +762,13 @@ class MainWindow(QtWidgets.QMainWindow):
755
762
  self.show_message_box(f"{err}")
756
763
 
757
764
  def on_focus_changed(self, new):
758
- """"""
765
+ """Called when text entry focus has changed."""
759
766
  if self.use_esm:
760
767
  if hasattr(self.contest, "process_esm"):
761
768
  self.contest.process_esm(self, new_focused_widget=new)
762
769
 
763
770
  def make_button_green(self, the_button: QtWidgets.QPushButton) -> None:
764
- """Turn the_button green."""
771
+ """Takes supplied QPushButton object and turns it green."""
765
772
  if the_button is not None:
766
773
  pal = QPalette()
767
774
  pal.isCopyOf(self.current_palette)
@@ -1599,6 +1606,7 @@ class MainWindow(QtWidgets.QMainWindow):
1599
1606
  self.set_window_title()
1600
1607
  if self.rig_control:
1601
1608
  self.rig_control.set_mode(self.radio_state.get("mode"))
1609
+ self.update_rtc_xml()
1602
1610
  except ModuleNotFoundError:
1603
1611
  self.pref["contest"] = 1
1604
1612
  self.show_message_box("Contest plugin not found")
@@ -2457,7 +2465,7 @@ class MainWindow(QtWidgets.QMainWindow):
2457
2465
  self.worked_list = self.database.get_calls_and_bands()
2458
2466
  self.send_worked_list()
2459
2467
  self.clearinputs()
2460
-
2468
+ self.update_rtc_xml()
2461
2469
  cmd = {}
2462
2470
  cmd["cmd"] = "UPDATELOG"
2463
2471
  if self.log_window:
@@ -2465,6 +2473,17 @@ class MainWindow(QtWidgets.QMainWindow):
2465
2473
  if self.check_window:
2466
2474
  self.check_window.msg_from_main(cmd)
2467
2475
 
2476
+ def update_rtc_xml(self):
2477
+ """Update RTC XML"""
2478
+ print("update the xml")
2479
+ if self.pref.get("send_rtc_scores", False):
2480
+ if self.contest is None:
2481
+ return
2482
+ if hasattr(self.contest, "online_score_xml"):
2483
+ if self.rtc_service is not None:
2484
+ self.rtc_service.xml = self.contest.online_score_xml(self)
2485
+ print(f"{self.rtc_service.xml=}")
2486
+
2468
2487
  def new_contest_dialog(self) -> None:
2469
2488
  """
2470
2489
  Show new contest dialog.
@@ -2898,6 +2917,31 @@ class MainWindow(QtWidgets.QMainWindow):
2898
2917
  self.setDarkMode(False)
2899
2918
  self.actionDark_Mode_2.setChecked(False)
2900
2919
 
2920
+ try:
2921
+ if self.rtc_thread.isRunning():
2922
+ self.rtc_service.time_to_quit = True
2923
+ self.rtc_thread.quit()
2924
+ self.rtc_thread.wait(1000)
2925
+
2926
+ except (RuntimeError, AttributeError):
2927
+ ...
2928
+
2929
+ self.rtc_service = None
2930
+
2931
+ self.send_rtc_scores = self.pref.get("send_rtc_scores", False)
2932
+ self.rtc_url = self.pref.get("rtc_url", "")
2933
+ self.rtc_user = self.pref.get("rtc_user", "")
2934
+ self.rtc_pass = self.pref.get("rtc_pass", "")
2935
+ self.rtc_interval = self.pref.get("rtc_interval", 2)
2936
+
2937
+ if self.pref.get("send_rtc_scores", False):
2938
+ self.rtc_service = RTCService()
2939
+ self.rtc_service.moveToThread(self.rtc_thread)
2940
+ self.rtc_thread.started.connect(self.rtc_service.run)
2941
+ self.rtc_thread.finished.connect(self.rtc_service.deleteLater)
2942
+ # self.rtc_service.poll_callback.connect(self.rtc_result)
2943
+ self.rtc_thread.start()
2944
+
2901
2945
  try:
2902
2946
  if self.radio_thread.isRunning():
2903
2947
  self.rig_control.time_to_quit = True
@@ -3046,6 +3090,8 @@ class MainWindow(QtWidgets.QMainWindow):
3046
3090
  self.esm_dict["MYCALL"] = fkey_dict.get(self.pref.get("esm_mycall", "DISABLED"))
3047
3091
  self.esm_dict["QSOB4"] = fkey_dict.get(self.pref.get("esm_qsob4", "DISABLED"))
3048
3092
 
3093
+ self.update_rtc_xml()
3094
+
3049
3095
  def dark_mode_state_changed(self) -> None:
3050
3096
  """Called when the Dark Mode menu state is changed."""
3051
3097
  self.pref["darkmode"] = self.actionDark_Mode_2.isChecked()
@@ -2173,6 +2173,76 @@
2173
2173
  </property>
2174
2174
  </widget>
2175
2175
  </item>
2176
+ <item>
2177
+ <widget class="Line" name="line">
2178
+ <property name="orientation">
2179
+ <enum>Qt::Horizontal</enum>
2180
+ </property>
2181
+ </widget>
2182
+ </item>
2183
+ <item>
2184
+ <widget class="QCheckBox" name="send_rtc_scores">
2185
+ <property name="text">
2186
+ <string>Use RTC score reporting</string>
2187
+ </property>
2188
+ </widget>
2189
+ </item>
2190
+ <item>
2191
+ <widget class="QComboBox" name="rtc_url">
2192
+ <item>
2193
+ <property name="text">
2194
+ <string>https://hamscore.com/postxml/</string>
2195
+ </property>
2196
+ </item>
2197
+ <item>
2198
+ <property name="text">
2199
+ <string>https://contestonlinescore.com/post/</string>
2200
+ </property>
2201
+ </item>
2202
+ <item>
2203
+ <property name="text">
2204
+ <string>http://contest.run</string>
2205
+ </property>
2206
+ </item>
2207
+ </widget>
2208
+ </item>
2209
+ <item>
2210
+ <widget class="QLineEdit" name="rtc_user">
2211
+ <property name="placeholderText">
2212
+ <string>username</string>
2213
+ </property>
2214
+ </widget>
2215
+ </item>
2216
+ <item>
2217
+ <widget class="QLineEdit" name="rtc_pass">
2218
+ <property name="echoMode">
2219
+ <enum>QLineEdit::EchoMode::Password</enum>
2220
+ </property>
2221
+ <property name="placeholderText">
2222
+ <string>password</string>
2223
+ </property>
2224
+ </widget>
2225
+ </item>
2226
+ <item>
2227
+ <widget class="QLabel" name="label_28">
2228
+ <property name="text">
2229
+ <string>Score posting interval (minutes)</string>
2230
+ </property>
2231
+ <property name="alignment">
2232
+ <set>Qt::AlignCenter</set>
2233
+ </property>
2234
+ </widget>
2235
+ </item>
2236
+ <item>
2237
+ <widget class="QLineEdit" name="rtc_interval">
2238
+ <property name="text">
2239
+ <string>2</string>
2240
+ </property>
2241
+ <property name="alignment">
2242
+ <set>Qt::AlignCenter</set>
2243
+ </property>
2244
+ </widget>
2245
+ </item>
2176
2246
  <item>
2177
2247
  <spacer name="verticalSpacer_8">
2178
2248
  <property name="orientation">
@@ -4,6 +4,58 @@ import datetime
4
4
  from decimal import Decimal
5
5
  from pathlib import Path
6
6
  from not1mm.lib.ham_utility import get_adif_band
7
+ from not1mm.lib.version import __version__
8
+
9
+
10
+ def online_score_xml(self):
11
+ """generate online xml"""
12
+
13
+ mults = self.contest.get_mults(self)
14
+ the_mults = ""
15
+ for thing in mults:
16
+ the_mults += (
17
+ f'<mult band="total" mode="ALL" type="{thing}">{mults.get(thing,0)}</mult>'
18
+ )
19
+
20
+ the_points = self.contest.just_points(self)
21
+
22
+ the_date_time = datetime.datetime.now(datetime.timezone.utc).isoformat(" ")[:19]
23
+ assisted = self.contest_settings.get("AssistedCategory", "")
24
+ bands = self.contest_settings.get("BandCategory", "")
25
+ modes = self.contest_settings.get("ModeCategory", "")
26
+ xmiter = self.contest_settings.get("TransmitterCategory", "")
27
+ ops = self.contest_settings.get("OperatorCategory", "")
28
+ overlay = self.contest_settings.get("OverlayCategory", "")
29
+ power = self.contest_settings.get("PowerCategory", "")
30
+
31
+ the_xml = (
32
+ '<?xml version="1.0"?>'
33
+ "<dynamicresults>"
34
+ f"<contest>{self.contest.cabrillo_name}</contest>"
35
+ f'<call>{self.station.get("Call", "")}</call>'
36
+ # <ops>NR9Q</ops>
37
+ f'<class power="{power}" assisted = "{assisted}" transmitter="{xmiter}" ops="{ops}" bands="{bands}" mode="{modes}" overlay="{overlay}"></class>'
38
+ f"<club>{self.station.get('Club', '').upper()}</club>"
39
+ "<soft>Not1MM</soft>"
40
+ f"<version>{__version__}</version>"
41
+ "<qth>"
42
+ # <dxcccountry>K</dxcccountry>
43
+ f"<cqzone>{self.station.get('CQZone','')}</cqzone>"
44
+ f"<iaruzone>{self.station.get('IARUZone','')}</iaruzone>"
45
+ f"<arrlsection>{self.station.get('ARRLSection', '')}</arrlsection>"
46
+ f"<stprvoth>{self.station.get('State','')}</stprvoth>"
47
+ f"<grid6>{self.station.get('GridSquare','')}</grid6>"
48
+ "</qth>"
49
+ "<breakdown>"
50
+ f'<qso band="total" mode="ALL">{self.contest.show_qso(self)}</qso>'
51
+ f"{the_mults}"
52
+ f'<point band="total" mode="ALL">{the_points}</point>'
53
+ "</breakdown>"
54
+ f"<score>{self.contest.calc_score(self)}</score>"
55
+ f"<timestamp>{the_date_time}</timestamp>"
56
+ "</dynamicresults>"
57
+ )
58
+ return the_xml
7
59
 
8
60
 
9
61
  def get_points(self):
@@ -21,10 +73,9 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
21
73
  """
22
74
  now = datetime.datetime.now()
23
75
  date_time = now.strftime("%Y-%m-%d_%H-%M-%S")
76
+ station_callsign = self.station.get("Call", "").upper()
24
77
  filename = (
25
- str(Path.home())
26
- + "/"
27
- + f"{self.station.get('Call', '').upper()}_{cabrillo_name}_{date_time}.adi"
78
+ str(Path.home()) + "/" + f"{station_callsign}_{cabrillo_name}_{date_time}.adi"
28
79
  )
29
80
  log = self.database.fetch_all_contacts_asc()
30
81
  try:
@@ -71,6 +122,15 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
71
122
  except TypeError:
72
123
  ...
73
124
 
125
+ try:
126
+ print(
127
+ f"<STATION_CALLSIGN:{len(station_callsign)}>{station_callsign}",
128
+ end="\r\n",
129
+ file=file_descriptor,
130
+ )
131
+ except TypeError:
132
+ ...
133
+
74
134
  try:
75
135
  print(
76
136
  f"<CALL:{len(hiscall)}>{hiscall.upper()}",
@@ -41,6 +41,19 @@ class Settings(QtWidgets.QDialog):
41
41
  def setup(self):
42
42
  """setup dialog"""
43
43
 
44
+ self.send_rtc_scores.setChecked(
45
+ bool(self.preference.get("send_rtc_scores", False))
46
+ )
47
+
48
+ value = self.preference.get("rtc_url", "")
49
+ index = self.rtc_url.findText(value)
50
+ if index != -1:
51
+ self.rtc_url.setCurrentIndex(index)
52
+
53
+ self.rtc_user.setText(str(self.preference.get("rtc_user", "")))
54
+ self.rtc_pass.setText(str(self.preference.get("rtc_pass", "")))
55
+ self.rtc_interval.setText(str(self.preference.get("rtc_interval", "2")))
56
+
44
57
  self.use_call_history.setChecked(
45
58
  bool(self.preference.get("use_call_history", False))
46
59
  )
@@ -195,6 +208,15 @@ class Settings(QtWidgets.QDialog):
195
208
  """
196
209
  Write preferences to json file.
197
210
  """
211
+ self.preference["send_rtc_scores"] = self.send_rtc_scores.isChecked()
212
+ self.preference["rtc_url"] = self.rtc_url.currentText()
213
+ self.preference["rtc_user"] = self.rtc_user.text()
214
+ self.preference["rtc_pass"] = self.rtc_pass.text()
215
+ try:
216
+ self.preference["rtc_interval"] = int(self.rtc_interval.text())
217
+ except ValueError:
218
+ self.preference["rtc_interval"] = 2
219
+
198
220
  self.preference["use_call_history"] = self.use_call_history.isChecked()
199
221
  self.preference["use_esm"] = self.use_esm.isChecked()
200
222
  self.preference["esm_cq"] = self.esm_cq.currentText()
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.12.5.1"
@@ -3,8 +3,8 @@
3
3
  not1mm Contest logger
4
4
  Email: michael.bridak@gmail.com
5
5
  GPL V3
6
- Class: BandMapWindow
7
- Purpose: Onscreen widget to show realtime spots from an AR cluster.
6
+ Class: LookupService
7
+ Purpose: Lookup callsigns with online services.
8
8
  """
9
9
 
10
10
  # pylint: disable=unused-import, c-extension-no-member, no-member, invalid-name, too-many-lines