not1mm 24.3.21__tar.gz → 24.3.24__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 (161) hide show
  1. {not1mm-24.3.21 → not1mm-24.3.24}/PKG-INFO +64 -55
  2. {not1mm-24.3.21 → not1mm-24.3.24}/README.md +63 -54
  3. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/__main__.py +2 -2
  4. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/bandmap.py +63 -52
  5. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/checkwindow.py +14 -9
  6. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/cty.json +1 -1
  7. not1mm-24.3.24/not1mm/fsutils.py +63 -0
  8. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/super_check_partial.py +3 -1
  9. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/version.py +1 -1
  10. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/logwindow.py +30 -29
  11. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/vfo.py +10 -9
  12. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/PKG-INFO +64 -55
  13. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/SOURCES.txt +0 -1
  14. {not1mm-24.3.21 → not1mm-24.3.24}/pyproject.toml +1 -1
  15. not1mm-24.3.21/not1mm/data/vfo2.ui +0 -84
  16. not1mm-24.3.21/not1mm/fsutils.py +0 -38
  17. {not1mm-24.3.21 → not1mm-24.3.24}/LICENSE +0 -0
  18. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/__init__.py +0 -0
  19. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  20. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/MASTER.SCP +0 -0
  21. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/about.ui +0 -0
  22. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  23. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/bandmap.ui +0 -0
  24. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/check.png +0 -0
  25. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/checkwindow.ui +0 -0
  26. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/configuration.ui +0 -0
  27. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/contests.sql +0 -0
  28. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/cwmacros.txt +0 -0
  29. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/donors.html +0 -0
  30. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/editcontact.ui +0 -0
  31. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/editmacro.ui +0 -0
  32. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/greendot.png +0 -0
  33. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/k6gte-not1mm.desktop +0 -0
  34. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-128.png +0 -0
  35. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-32.png +0 -0
  36. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-64.png +0 -0
  37. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/logwindow.ui +0 -0
  38. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/main.ui +0 -0
  39. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/new_contest.ui +0 -0
  40. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/not1mm.html +0 -0
  41. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/opon.ui +0 -0
  42. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/0.wav +0 -0
  43. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/1.wav +0 -0
  44. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/2.wav +0 -0
  45. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/3.wav +0 -0
  46. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/4.wav +0 -0
  47. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/5.wav +0 -0
  48. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/6.wav +0 -0
  49. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/7.wav +0 -0
  50. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/73.wav +0 -0
  51. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/8.wav +0 -0
  52. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/9.wav +0 -0
  53. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/a.wav +0 -0
  54. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/again.wav +0 -0
  55. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/b.wav +0 -0
  56. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/c.wav +0 -0
  57. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/contest.wav +0 -0
  58. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/cq.wav +0 -0
  59. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/d.wav +0 -0
  60. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/e.wav +0 -0
  61. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/f.wav +0 -0
  62. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/g.wav +0 -0
  63. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/h.wav +0 -0
  64. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/i.wav +0 -0
  65. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/j.wav +0 -0
  66. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/k.wav +0 -0
  67. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/k6gte.wav +0 -0
  68. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/l.wav +0 -0
  69. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/m.wav +0 -0
  70. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/mynumber.wav +0 -0
  71. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/n.wav +0 -0
  72. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/nil.wav +0 -0
  73. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/o.wav +0 -0
  74. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/p.wav +0 -0
  75. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/q.wav +0 -0
  76. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/r.wav +0 -0
  77. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/roger.wav +0 -0
  78. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/s.wav +0 -0
  79. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/space.wav +0 -0
  80. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/t.wav +0 -0
  81. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/thankyou.wav +0 -0
  82. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  83. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/u.wav +0 -0
  84. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/v.wav +0 -0
  85. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/w.wav +0 -0
  86. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/x.wav +0 -0
  87. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/y.wav +0 -0
  88. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/yourcall.wav +0 -0
  89. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/phonetics/z.wav +0 -0
  90. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/pickcontest.ui +0 -0
  91. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/radio_green.png +0 -0
  92. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/radio_grey.png +0 -0
  93. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/radio_red.png +0 -0
  94. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/reddot.png +0 -0
  95. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/settings.ui +0 -0
  96. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/ssbmacros.txt +0 -0
  97. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/data/vfo.ui +0 -0
  98. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/__init__.py +0 -0
  99. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/about.py +0 -0
  100. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/cat_interface.py +0 -0
  101. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/cwinterface.py +0 -0
  102. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/database.py +0 -0
  103. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/edit_contact.py +0 -0
  104. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/edit_macro.py +0 -0
  105. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/edit_opon.py +0 -0
  106. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/edit_station.py +0 -0
  107. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/ham_utility.py +0 -0
  108. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/lookup.py +0 -0
  109. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/multicast.py +0 -0
  110. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/n1mm.py +0 -0
  111. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/new_contest.py +0 -0
  112. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/plugin_common.py +0 -0
  113. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/select_contest.py +0 -0
  114. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/settings.py +0 -0
  115. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/lib/versiontest.py +0 -0
  116. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/10_10_fall_cw.py +0 -0
  117. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/10_10_spring_cw.py +0 -0
  118. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/10_10_summer_phone.py +0 -0
  119. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/10_10_winter_phone.py +0 -0
  120. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/__init__.py +0 -0
  121. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_10m.py +0 -0
  122. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_dx_cw.py +0 -0
  123. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  124. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_field_day.py +0 -0
  125. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  126. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_ss_cw.py +0 -0
  127. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_ss_phone.py +0 -0
  128. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  129. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  130. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  131. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/canada_day.py +0 -0
  132. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_160_cw.py +0 -0
  133. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_160_ssb.py +0 -0
  134. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_wpx_cw.py +0 -0
  135. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  136. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_ww_cw.py +0 -0
  137. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cq_ww_ssb.py +0 -0
  138. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/cwt.py +0 -0
  139. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/general_logging.py +0 -0
  140. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/iaru_hf.py +0 -0
  141. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/jidx_cw.py +0 -0
  142. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/jidx_ph.py +0 -0
  143. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/naqp_cw.py +0 -0
  144. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/naqp_ssb.py +0 -0
  145. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/phone_weekly_test.py +0 -0
  146. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/stew_perry_topband.py +0 -0
  147. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/plugins/winter_field_day.py +0 -0
  148. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/fakeflrig.py +0 -0
  149. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/flrigclient.py +0 -0
  150. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/multicast_listener.py +0 -0
  151. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/n1mm_listener.py +0 -0
  152. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/simulant.py +0 -0
  153. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm/testing/test.py +0 -0
  154. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/dependency_links.txt +0 -0
  155. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/entry_points.txt +0 -0
  156. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/requires.txt +0 -0
  157. {not1mm-24.3.21 → not1mm-24.3.24}/not1mm.egg-info/top_level.txt +0 -0
  158. {not1mm-24.3.21 → not1mm-24.3.24}/setup.cfg +0 -0
  159. {not1mm-24.3.21 → not1mm-24.3.24}/testing/detectdark.py +0 -0
  160. {not1mm-24.3.21 → not1mm-24.3.24}/testing/test.py +0 -0
  161. {not1mm-24.3.21 → not1mm-24.3.24}/usb_vfo_knob/code.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.3.21
3
+ Version: 24.3.24
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
@@ -48,19 +48,16 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
48
48
  - [Our Code Contributors ✨](#our-code-contributors-)
49
49
  - [List of should be working contests](#list-of-should-be-working-contests)
50
50
  - [Recent Changes](#recent-changes)
51
- - [Installing from PyPi](#installing-from-pypi)
52
- - [Python and pip](#python-and-pip)
53
- - [Installing with pip](#installing-with-pip)
54
- - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
55
- - [Ubuntu 23.04](#ubuntu-2304)
56
- - [Fedora 38 \& 39](#fedora-38--39)
51
+ - [Installation](#installation)
52
+ - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
53
+ - [Bootstrapping pipx](#bootstrapping-pipx)
54
+ - [Installing with pipx](#installing-with-pipx)
55
+ - [Installing portaudio](#installing-portaudio)
56
+ - [After install](#after-install)
57
57
  - [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
58
58
  - [Or this fan favorite](#or-this-fan-favorite)
59
- - [Updating with pip/pipx](#updating-with-pippipx)
60
- - [Other Libraries](#other-libraries)
61
- - [Dark mode on Ubuntu](#dark-mode-on-ubuntu)
62
59
  - [Wayland Compositor](#wayland-compositor)
63
- - [Running from source](#running-from-source)
60
+ - [Running from source](#running-from-source)
64
61
  - [Various data file locations](#various-data-file-locations)
65
62
  - [Data](#data)
66
63
  - [Config](#config)
@@ -71,13 +68,14 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
71
68
  - [Revisiting an old friend](#revisiting-an-old-friend)
72
69
  - [Station Settings dialog (REQUIRED)](#station-settings-dialog-required)
73
70
  - [Changing station information](#changing-station-information)
74
- - [Adding a contest to the current dababase (REQUIRED)](#adding-a-contest-to-the-current-dababase-required)
75
- - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
76
- - [Editing existing contest parameters](#editing-existing-contest-parameters)
71
+ - [Selecting a contest (REQUIRED)](#selecting-a-contest-required)
72
+ - [Selecting a new contest](#selecting-a-new-contest)
73
+ - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
74
+ - [Editing existing contest parameters](#editing-existing-contest-parameters)
77
75
  - [Configuration Settings](#configuration-settings)
78
76
  - [Lookup](#lookup)
79
77
  - [Soundcard](#soundcard)
80
- - [CAT](#cat)
78
+ - [CAT Control](#cat-control)
81
79
  - [CW Keyer interface](#cw-keyer-interface)
82
80
  - [Cluster](#cluster)
83
81
  - [N1MM Packets](#n1mm-packets)
@@ -90,7 +88,7 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
90
88
  - [Other uses for the call field](#other-uses-for-the-call-field)
91
89
  - [Windows](#windows)
92
90
  - [The Main Window](#the-main-window)
93
- - [Keyboard commands](#keyboard-commands)
91
+ - [Keyboard commands](#keyboard-commands)
94
92
  - [Log Display](#log-display)
95
93
  - [Editing a contact](#editing-a-contact)
96
94
  - [Recalulate Mults](#recalulate-mults)
@@ -169,6 +167,8 @@ I wish to thank those who've contributed to the project.
169
167
 
170
168
  ## Recent Changes
171
169
 
170
+ - [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
171
+ - [24-3-23] Yanked version 24-3-21, too many bugs for existing userbase.
172
172
  - [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
173
173
  - [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
174
174
  - [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
@@ -181,43 +181,64 @@ I wish to thank those who've contributed to the project.
181
181
 
182
182
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
183
183
 
184
- ## Installing from PyPi
184
+ ## Installation
185
185
 
186
- ### Python and pip
186
+ ### Python, PyPI, pip and pipx
187
187
 
188
- This software is a Python package hosted on PyPi, and installable with the pip or pipx command. If this is your first exposure to pip you can get all the details from [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/). In short, most linux distros come with Python pre installed. If pip is not installed by default, you can usually load it through your package manager. For example `sudo apt install python3-pip` or `sudo dnf install python3-pip`.
188
+ This software is a Python package hosted on PyPI, and installable with the pip or pipx command. If this is your first exposure to Python packaging you can get all the details from:
189
189
 
190
- ### Installing with pip
190
+ - [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/)
191
+ - [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/)
192
+ - [Installing stand alone command line tools](https://packaging.python.org/en/latest/guides/installing-stand-alone-command-line-tools/)
191
193
 
192
- I've included what installation steps I took to install on fresh images of Ubuntu and Fedora below. YMMV.
194
+ In short, You should install stuff into a Python virtual environment. Newer Linux distros will make you do this unless you include a command line argument akin to '--break-my-system' when using pip. I'm not telling you to use pipx. But... **Use pipx**.
193
195
 
194
- #### Ubuntu 22.04 LTS
196
+ ### Bootstrapping pipx
197
+
198
+ Assuming you have only Python installed, your path to pipx is:
195
199
 
196
200
  ```bash
197
- sudo apt update
198
- sudo apt upgrade
199
- sudo apt install -y libportaudio2 python3-pip python3-pyqt5 python3-numpy adwaita-qt
200
- pip install -U not1mm
201
+ # First get pip installed. Either with apt or dnf, or the ensurepip command.
202
+ python3 -m ensurepip
203
+
204
+ # Update the pip that was just installed.
205
+ python3 -m pip install --upgrade pip
206
+
207
+ # Install pipx
208
+ python3 -m pip install --user pipx
209
+ python3 -m pipx ensurepath
201
210
  ```
202
211
 
203
- #### Ubuntu 23.04
212
+ ### Installing with pipx
213
+
214
+ Then installing not1mm is as simple as:
204
215
 
205
216
  ```bash
206
- sudo apt update
207
- sudo apt upgrade
208
- sudo apt install -y libportaudio2 adwaita-qt pipx
217
+ # Install not1mm
209
218
  pipx install not1mm
210
- pipx ensurepath
211
219
  ```
212
220
 
213
- #### Fedora 38 & 39
221
+ If you need to later update not1mm, you can do so with:
222
+
223
+ ```bash
224
+ # Update not1mm
225
+ pipx upgrade not1mm
226
+ ```
227
+
228
+ ### Installing portaudio
229
+
230
+ not1mm uses portaudio to play audio. You can install it with:
214
231
 
215
232
  ```bash
216
- sudo dnf upgrade --refresh
233
+ # Ubuntu
234
+ sudo apt install -y libportaudio2
235
+
236
+ # Fedora
217
237
  sudo dnf install python3-pip portaudio
218
- pip install not1mm
219
238
  ```
220
239
 
240
+ ## After install
241
+
221
242
  You can now open a new terminal and type `not1mm`. On it's first run, it may or may not install a lovely non AI generated
222
243
  icon, which you can later click on to launch the application.
223
244
 
@@ -244,27 +265,13 @@ To avoid this you can export an environment variable and launch the app like thi
244
265
 
245
266
  For a more permanent solution you can place the line `export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then after logging out and back in you should be able to launch it normally.
246
267
 
247
- ### Updating with pip/pipx
248
-
249
- I've been posting updates just about everyday. Sometimes multiple times a day. It's early days, so there is much to do. You can check for and install updates with `pip install -U not1mm` or if installed with pipx `pipx upgrade not1mm`.
250
-
251
- ## Other Libraries
252
-
253
- The audio library used, uses pipewire/portaudio. You may need to install portaudio. Ubuntu: `sudo apt install libportaudio2`
254
-
255
- ### Dark mode on Ubuntu
256
-
257
- I believe I figured out dark mode in Ubuntu and have it working on my shack PC that runs Ubuntu 22.04. The secret sauce seems to be installing adwaita-qt with apt, and setting an environment variable `QT_STYLE_OVERRIDE` to `Adwaita-Dark`. I set the environment variable in the start of the program if running on a Gnome platform. So you don't need to do that part.
258
-
259
- Or see this discussion [darkmode](https://github.com/mbridak/not1mm/discussions/60).
260
-
261
268
  ## Wayland Compositor
262
269
 
263
270
  One side effect of Wayland is that we are not able to request for a window to regain or retain focus. So if you were to click on a spot in the bandmap window to tune to that spot, you would have to then click on the main window to continue entering contest data. I'm aware of this, but I can not change it.
264
271
 
265
- ## Running from source
272
+ ### Running from source
266
273
 
267
- Since this is packaged for PyPi, if you want to work on your own source branch, after cloning from github you would:
274
+ Since this is packaged for PyPI, if you want to work on your own source branch, after cloning from github you would:
268
275
 
269
276
  ```bash
270
277
  pip install --upgrade pip
@@ -333,19 +340,21 @@ You can fill. You can fill. Everyone look at your keys.
333
340
 
334
341
  Station information can be changed any time by going to `File` > `Station Settings` and editing the information.
335
342
 
336
- ## Adding a contest to the current dababase (REQUIRED)
343
+ ## Selecting a contest (REQUIRED)
344
+
345
+ ### Selecting a new contest
337
346
 
338
347
  Select `File` > `New Contest`
339
348
 
340
349
  ![New Contest Dialog](https://github.com/mbridak/not1mm/raw/master/pic/new_contest.png)
341
350
 
342
- ## Selecting an existing contest as the current contest
351
+ ### Selecting an existing contest as the current contest
343
352
 
344
353
  Select `File` > `Open Contest`
345
354
 
346
355
  ![Open an existing contest](https://github.com/mbridak/not1mm/raw/master/pic/select_contest.png)
347
356
 
348
- ## Editing existing contest parameters
357
+ ### Editing existing contest parameters
349
358
 
350
359
  You can edit the parameters of a previously defined contest by selecting it as the current contest. Then select `File` > `Edit Current Contest`. Click `OK` to save the new values and reload the contest. `Cancel` to keep the existing parameters.
351
360
 
@@ -365,7 +374,7 @@ For callsign lookup, Two services are supported. QRZ and HamQTH. They require a
365
374
 
366
375
  Choose the sound output device for the voice keyer.
367
376
 
368
- ### CAT
377
+ ### CAT Control
369
378
 
370
379
  Under the `CAT` TAB, you can choose either `rigctld` normally with an IP of `127.0.0.1` and a port of `4532`. Or `flrig`, IP normally of `127.0.0.1` and a port of `12345`. `None` is always an option, but is it really? There's an onscreen icon for CAT status. Green good, Red bad, Grey neither.
371
380
 
@@ -448,7 +457,7 @@ After this, a request is made to QRZ for the gridsquare of the callsign. If ther
448
457
 
449
458
  ![Main screen with callouts](https://github.com/mbridak/not1mm/raw/master/pic/mainwithcallouts.png)
450
459
 
451
- #### Keyboard commands
460
+ ### Keyboard commands
452
461
 
453
462
  | Key | Result |
454
463
  | -------------- | --- |
@@ -17,19 +17,16 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
17
17
  - [Our Code Contributors ✨](#our-code-contributors-)
18
18
  - [List of should be working contests](#list-of-should-be-working-contests)
19
19
  - [Recent Changes](#recent-changes)
20
- - [Installing from PyPi](#installing-from-pypi)
21
- - [Python and pip](#python-and-pip)
22
- - [Installing with pip](#installing-with-pip)
23
- - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
24
- - [Ubuntu 23.04](#ubuntu-2304)
25
- - [Fedora 38 \& 39](#fedora-38--39)
20
+ - [Installation](#installation)
21
+ - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
22
+ - [Bootstrapping pipx](#bootstrapping-pipx)
23
+ - [Installing with pipx](#installing-with-pipx)
24
+ - [Installing portaudio](#installing-portaudio)
25
+ - [After install](#after-install)
26
26
  - [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
27
27
  - [Or this fan favorite](#or-this-fan-favorite)
28
- - [Updating with pip/pipx](#updating-with-pippipx)
29
- - [Other Libraries](#other-libraries)
30
- - [Dark mode on Ubuntu](#dark-mode-on-ubuntu)
31
28
  - [Wayland Compositor](#wayland-compositor)
32
- - [Running from source](#running-from-source)
29
+ - [Running from source](#running-from-source)
33
30
  - [Various data file locations](#various-data-file-locations)
34
31
  - [Data](#data)
35
32
  - [Config](#config)
@@ -40,13 +37,14 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
40
37
  - [Revisiting an old friend](#revisiting-an-old-friend)
41
38
  - [Station Settings dialog (REQUIRED)](#station-settings-dialog-required)
42
39
  - [Changing station information](#changing-station-information)
43
- - [Adding a contest to the current dababase (REQUIRED)](#adding-a-contest-to-the-current-dababase-required)
44
- - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
45
- - [Editing existing contest parameters](#editing-existing-contest-parameters)
40
+ - [Selecting a contest (REQUIRED)](#selecting-a-contest-required)
41
+ - [Selecting a new contest](#selecting-a-new-contest)
42
+ - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
43
+ - [Editing existing contest parameters](#editing-existing-contest-parameters)
46
44
  - [Configuration Settings](#configuration-settings)
47
45
  - [Lookup](#lookup)
48
46
  - [Soundcard](#soundcard)
49
- - [CAT](#cat)
47
+ - [CAT Control](#cat-control)
50
48
  - [CW Keyer interface](#cw-keyer-interface)
51
49
  - [Cluster](#cluster)
52
50
  - [N1MM Packets](#n1mm-packets)
@@ -59,7 +57,7 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
59
57
  - [Other uses for the call field](#other-uses-for-the-call-field)
60
58
  - [Windows](#windows)
61
59
  - [The Main Window](#the-main-window)
62
- - [Keyboard commands](#keyboard-commands)
60
+ - [Keyboard commands](#keyboard-commands)
63
61
  - [Log Display](#log-display)
64
62
  - [Editing a contact](#editing-a-contact)
65
63
  - [Recalulate Mults](#recalulate-mults)
@@ -138,6 +136,8 @@ I wish to thank those who've contributed to the project.
138
136
 
139
137
  ## Recent Changes
140
138
 
139
+ - [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
140
+ - [24-3-23] Yanked version 24-3-21, too many bugs for existing userbase.
141
141
  - [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
142
142
  - [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
143
143
  - [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
@@ -150,43 +150,64 @@ I wish to thank those who've contributed to the project.
150
150
 
151
151
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
152
152
 
153
- ## Installing from PyPi
153
+ ## Installation
154
154
 
155
- ### Python and pip
155
+ ### Python, PyPI, pip and pipx
156
156
 
157
- This software is a Python package hosted on PyPi, and installable with the pip or pipx command. If this is your first exposure to pip you can get all the details from [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/). In short, most linux distros come with Python pre installed. If pip is not installed by default, you can usually load it through your package manager. For example `sudo apt install python3-pip` or `sudo dnf install python3-pip`.
157
+ This software is a Python package hosted on PyPI, and installable with the pip or pipx command. If this is your first exposure to Python packaging you can get all the details from:
158
158
 
159
- ### Installing with pip
159
+ - [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/)
160
+ - [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/)
161
+ - [Installing stand alone command line tools](https://packaging.python.org/en/latest/guides/installing-stand-alone-command-line-tools/)
160
162
 
161
- I've included what installation steps I took to install on fresh images of Ubuntu and Fedora below. YMMV.
163
+ In short, You should install stuff into a Python virtual environment. Newer Linux distros will make you do this unless you include a command line argument akin to '--break-my-system' when using pip. I'm not telling you to use pipx. But... **Use pipx**.
162
164
 
163
- #### Ubuntu 22.04 LTS
165
+ ### Bootstrapping pipx
166
+
167
+ Assuming you have only Python installed, your path to pipx is:
164
168
 
165
169
  ```bash
166
- sudo apt update
167
- sudo apt upgrade
168
- sudo apt install -y libportaudio2 python3-pip python3-pyqt5 python3-numpy adwaita-qt
169
- pip install -U not1mm
170
+ # First get pip installed. Either with apt or dnf, or the ensurepip command.
171
+ python3 -m ensurepip
172
+
173
+ # Update the pip that was just installed.
174
+ python3 -m pip install --upgrade pip
175
+
176
+ # Install pipx
177
+ python3 -m pip install --user pipx
178
+ python3 -m pipx ensurepath
170
179
  ```
171
180
 
172
- #### Ubuntu 23.04
181
+ ### Installing with pipx
182
+
183
+ Then installing not1mm is as simple as:
173
184
 
174
185
  ```bash
175
- sudo apt update
176
- sudo apt upgrade
177
- sudo apt install -y libportaudio2 adwaita-qt pipx
186
+ # Install not1mm
178
187
  pipx install not1mm
179
- pipx ensurepath
180
188
  ```
181
189
 
182
- #### Fedora 38 & 39
190
+ If you need to later update not1mm, you can do so with:
191
+
192
+ ```bash
193
+ # Update not1mm
194
+ pipx upgrade not1mm
195
+ ```
196
+
197
+ ### Installing portaudio
198
+
199
+ not1mm uses portaudio to play audio. You can install it with:
183
200
 
184
201
  ```bash
185
- sudo dnf upgrade --refresh
202
+ # Ubuntu
203
+ sudo apt install -y libportaudio2
204
+
205
+ # Fedora
186
206
  sudo dnf install python3-pip portaudio
187
- pip install not1mm
188
207
  ```
189
208
 
209
+ ## After install
210
+
190
211
  You can now open a new terminal and type `not1mm`. On it's first run, it may or may not install a lovely non AI generated
191
212
  icon, which you can later click on to launch the application.
192
213
 
@@ -213,27 +234,13 @@ To avoid this you can export an environment variable and launch the app like thi
213
234
 
214
235
  For a more permanent solution you can place the line `export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then after logging out and back in you should be able to launch it normally.
215
236
 
216
- ### Updating with pip/pipx
217
-
218
- I've been posting updates just about everyday. Sometimes multiple times a day. It's early days, so there is much to do. You can check for and install updates with `pip install -U not1mm` or if installed with pipx `pipx upgrade not1mm`.
219
-
220
- ## Other Libraries
221
-
222
- The audio library used, uses pipewire/portaudio. You may need to install portaudio. Ubuntu: `sudo apt install libportaudio2`
223
-
224
- ### Dark mode on Ubuntu
225
-
226
- I believe I figured out dark mode in Ubuntu and have it working on my shack PC that runs Ubuntu 22.04. The secret sauce seems to be installing adwaita-qt with apt, and setting an environment variable `QT_STYLE_OVERRIDE` to `Adwaita-Dark`. I set the environment variable in the start of the program if running on a Gnome platform. So you don't need to do that part.
227
-
228
- Or see this discussion [darkmode](https://github.com/mbridak/not1mm/discussions/60).
229
-
230
237
  ## Wayland Compositor
231
238
 
232
239
  One side effect of Wayland is that we are not able to request for a window to regain or retain focus. So if you were to click on a spot in the bandmap window to tune to that spot, you would have to then click on the main window to continue entering contest data. I'm aware of this, but I can not change it.
233
240
 
234
- ## Running from source
241
+ ### Running from source
235
242
 
236
- Since this is packaged for PyPi, if you want to work on your own source branch, after cloning from github you would:
243
+ Since this is packaged for PyPI, if you want to work on your own source branch, after cloning from github you would:
237
244
 
238
245
  ```bash
239
246
  pip install --upgrade pip
@@ -302,19 +309,21 @@ You can fill. You can fill. Everyone look at your keys.
302
309
 
303
310
  Station information can be changed any time by going to `File` > `Station Settings` and editing the information.
304
311
 
305
- ## Adding a contest to the current dababase (REQUIRED)
312
+ ## Selecting a contest (REQUIRED)
313
+
314
+ ### Selecting a new contest
306
315
 
307
316
  Select `File` > `New Contest`
308
317
 
309
318
  ![New Contest Dialog](https://github.com/mbridak/not1mm/raw/master/pic/new_contest.png)
310
319
 
311
- ## Selecting an existing contest as the current contest
320
+ ### Selecting an existing contest as the current contest
312
321
 
313
322
  Select `File` > `Open Contest`
314
323
 
315
324
  ![Open an existing contest](https://github.com/mbridak/not1mm/raw/master/pic/select_contest.png)
316
325
 
317
- ## Editing existing contest parameters
326
+ ### Editing existing contest parameters
318
327
 
319
328
  You can edit the parameters of a previously defined contest by selecting it as the current contest. Then select `File` > `Edit Current Contest`. Click `OK` to save the new values and reload the contest. `Cancel` to keep the existing parameters.
320
329
 
@@ -334,7 +343,7 @@ For callsign lookup, Two services are supported. QRZ and HamQTH. They require a
334
343
 
335
344
  Choose the sound output device for the voice keyer.
336
345
 
337
- ### CAT
346
+ ### CAT Control
338
347
 
339
348
  Under the `CAT` TAB, you can choose either `rigctld` normally with an IP of `127.0.0.1` and a port of `4532`. Or `flrig`, IP normally of `127.0.0.1` and a port of `12345`. `None` is always an option, but is it really? There's an onscreen icon for CAT status. Green good, Red bad, Grey neither.
340
349
 
@@ -417,7 +426,7 @@ After this, a request is made to QRZ for the gridsquare of the callsign. If ther
417
426
 
418
427
  ![Main screen with callouts](https://github.com/mbridak/not1mm/raw/master/pic/mainwithcallouts.png)
419
428
 
420
- #### Keyboard commands
429
+ ### Keyboard commands
421
430
 
422
431
  | Key | Result |
423
432
  | -------------- | --- |
@@ -3,7 +3,7 @@
3
3
  NOT1MM Logger
4
4
  """
5
5
  # pylint: disable=unused-import, c-extension-no-member, no-member, invalid-name, too-many-lines, no-name-in-module
6
- # pylint: disable=logging-fstring-interpolation, logging-not-lazy, line-too-long
6
+ # pylint: disable=logging-fstring-interpolation, logging-not-lazy, line-too-long, bare-except
7
7
 
8
8
  # alt cluster hamqth.com 7300
9
9
 
@@ -123,7 +123,7 @@ class MainWindow(QtWidgets.QMainWindow):
123
123
  "contest": "",
124
124
  "multicast_group": "239.1.1.1",
125
125
  "multicast_port": 2239,
126
- "interface_ip": "127.0.0.1",
126
+ "interface_ip": "0.0.0.0",
127
127
  "send_n1mm_packets": False,
128
128
  "n1mm_station_name": "20M CW Tent",
129
129
  "n1mm_operator": "Bernie",