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.
- {not1mm-24.11.19 → not1mm-24.11.23}/PKG-INFO +4 -3
- {not1mm-24.11.19 → not1mm-24.11.23}/README.md +3 -2
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/__main__.py +59 -62
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/donors.html +1 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/cat_interface.py +16 -1
- not1mm-24.11.23/not1mm/lib/version.py +3 -0
- not1mm-24.11.23/not1mm/plugins/general_logging.py +241 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/PKG-INFO +4 -3
- {not1mm-24.11.19 → not1mm-24.11.23}/pyproject.toml +1 -1
- not1mm-24.11.19/not1mm/lib/version.py +0 -3
- not1mm-24.11.19/not1mm/plugins/general_logging.py +0 -128
- {not1mm-24.11.19 → not1mm-24.11.23}/LICENSE +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/__init__.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/bandmap.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/checkwindow.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/MASTER.SCP +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/about.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/alpha bravo charlie delta.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/bandmap.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/check.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/checkwindow.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/configuration.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/contests.sql +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/cty.json +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/cwmacros.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/editcontact.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/editmacro.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/greendot.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte-not1mm.desktop +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-128.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-32.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/k6gte.not1mm-64.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/logwindow.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/logwindowx.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/main.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/new_contest.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/not1mm.html +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/opon.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/0.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/1.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/2.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/3.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/4.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/5.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/6.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/7.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/73.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/8.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/9.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/a.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/again.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/b.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/c.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/contest.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/cq.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/cq2.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/d.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/e.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/f.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/g.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/h.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/i.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/j.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/k.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/k6gte.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/l.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/m.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/mynumber.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/n.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/nil.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/o.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/p.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/q.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/r.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/roger.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/s.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/space.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/t.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/thankyou.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/u.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/v.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/w.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/x.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/y.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/yourcall.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/phonetics/z.wav +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/pickcontest.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_green.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_grey.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/radio_red.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/reddot.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/rttymacros.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/settings.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/splash.png +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/ssbmacros.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/data/vfo.ui +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/fsutils.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/__init__.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/about.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/cwinterface.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/database.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_contact.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_macro.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_opon.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/edit_station.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/fldigi_sendstring.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/fldigi_watcher.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/ft8_watcher.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/ham_utility.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/lookup.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/multicast.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/n1mm.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/new_contest.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/plugin_common.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/select_contest.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/settings.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/super_check_partial.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lib/versiontest.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/logwindow.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/lookupservice.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_fall_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_spring_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_summer_phone.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/10_10_winter_phone.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/__init__.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_10m.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_dx_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_dx_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_field_day.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_rtty_ru.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_ss_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_ss_phone.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_jan.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_jun.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/arrl_vhf_sep.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/canada_day.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_160_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_160_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_rtty.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_wpx_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_rtty.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cq_ww_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/cwt.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/darc_xmas.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/helvetia.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/iaru_hf.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/icwc_mst.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/jidx_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/jidx_ph.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/k1usn_sst.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/lz-dx.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_rtty.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/naqp_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/phone_weekly_test.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/raem.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/ref_cw.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/ref_ssb.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/stew_perry_topband.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/weekly_rtty.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/plugins/winter_field_day.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/radio.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/test.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/vfo.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm/voice_keying.py +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/SOURCES.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/dependency_links.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/entry_points.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/requires.txt +0 -0
- {not1mm-24.11.19 → not1mm-24.11.23}/not1mm.egg-info/top_level.txt +0 -0
- {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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
3666
|
-
"""
|
3667
|
-
|
3668
|
-
|
3669
|
-
|
3670
|
-
|
3671
|
-
|
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(
|
3737
|
+
fsutils.openFileWithOS(macro_file)
|
3707
3738
|
except FileNotFoundError | PermissionError | OSError as err:
|
3708
|
-
logger.critical(
|
3709
|
-
|
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
|
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
|
-
|
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"):
|
@@ -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,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.
|
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
|