not1mm 24.4.9.4__tar.gz → 24.4.17__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 (153) hide show
  1. {not1mm-24.4.9.4 → not1mm-24.4.17}/PKG-INFO +4 -2
  2. {not1mm-24.4.9.4 → not1mm-24.4.17}/README.md +3 -1
  3. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/checkwindow.py +20 -16
  4. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/settings.ui +1 -1
  5. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/fsutils.py +5 -11
  6. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/settings.py +11 -2
  7. not1mm-24.4.17/not1mm/lib/version.py +3 -0
  8. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/PKG-INFO +4 -2
  9. {not1mm-24.4.9.4 → not1mm-24.4.17}/pyproject.toml +1 -1
  10. not1mm-24.4.9.4/not1mm/lib/version.py +0 -3
  11. {not1mm-24.4.9.4 → not1mm-24.4.17}/LICENSE +0 -0
  12. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/__init__.py +0 -0
  13. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/__main__.py +0 -0
  14. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/bandmap.py +0 -0
  15. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  16. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/MASTER.SCP +0 -0
  17. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/about.ui +0 -0
  18. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  19. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/bandmap.ui +0 -0
  20. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/check.png +0 -0
  21. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/checkwindow.ui +0 -0
  22. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/configuration.ui +0 -0
  23. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/contests.sql +0 -0
  24. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/cty.json +0 -0
  25. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/cwmacros.txt +0 -0
  26. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/donors.html +0 -0
  27. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/editcontact.ui +0 -0
  28. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/editmacro.ui +0 -0
  29. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/greendot.png +0 -0
  30. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/k6gte-not1mm.desktop +0 -0
  31. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/k6gte.not1mm-128.png +0 -0
  32. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/k6gte.not1mm-32.png +0 -0
  33. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/k6gte.not1mm-64.png +0 -0
  34. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/logwindow.ui +0 -0
  35. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/logwindowx.ui +0 -0
  36. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/main.ui +0 -0
  37. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/new_contest.ui +0 -0
  38. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/not1mm.html +0 -0
  39. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/opon.ui +0 -0
  40. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/0.wav +0 -0
  41. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/1.wav +0 -0
  42. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/2.wav +0 -0
  43. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/3.wav +0 -0
  44. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/4.wav +0 -0
  45. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/5.wav +0 -0
  46. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/6.wav +0 -0
  47. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/7.wav +0 -0
  48. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/73.wav +0 -0
  49. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/8.wav +0 -0
  50. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/9.wav +0 -0
  51. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/a.wav +0 -0
  52. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/again.wav +0 -0
  53. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/b.wav +0 -0
  54. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/c.wav +0 -0
  55. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/contest.wav +0 -0
  56. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/cq.wav +0 -0
  57. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/d.wav +0 -0
  58. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/e.wav +0 -0
  59. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/f.wav +0 -0
  60. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/g.wav +0 -0
  61. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/h.wav +0 -0
  62. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/i.wav +0 -0
  63. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/j.wav +0 -0
  64. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/k.wav +0 -0
  65. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/k6gte.wav +0 -0
  66. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/l.wav +0 -0
  67. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/m.wav +0 -0
  68. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/mynumber.wav +0 -0
  69. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/n.wav +0 -0
  70. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/nil.wav +0 -0
  71. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/o.wav +0 -0
  72. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/p.wav +0 -0
  73. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/q.wav +0 -0
  74. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/r.wav +0 -0
  75. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/roger.wav +0 -0
  76. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/s.wav +0 -0
  77. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/space.wav +0 -0
  78. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/t.wav +0 -0
  79. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/thankyou.wav +0 -0
  80. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  81. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/u.wav +0 -0
  82. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/v.wav +0 -0
  83. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/w.wav +0 -0
  84. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/x.wav +0 -0
  85. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/y.wav +0 -0
  86. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/yourcall.wav +0 -0
  87. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/phonetics/z.wav +0 -0
  88. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/pickcontest.ui +0 -0
  89. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/radio_green.png +0 -0
  90. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/radio_grey.png +0 -0
  91. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/radio_red.png +0 -0
  92. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/reddot.png +0 -0
  93. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/ssbmacros.txt +0 -0
  94. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/data/vfo.ui +0 -0
  95. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/__init__.py +0 -0
  96. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/about.py +0 -0
  97. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/cat_interface.py +0 -0
  98. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/cwinterface.py +0 -0
  99. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/database.py +0 -0
  100. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/edit_contact.py +0 -0
  101. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/edit_macro.py +0 -0
  102. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/edit_opon.py +0 -0
  103. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/edit_station.py +0 -0
  104. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/ft8_watcher.py +0 -0
  105. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/ham_utility.py +0 -0
  106. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/lookup.py +0 -0
  107. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/multicast.py +0 -0
  108. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/n1mm.py +0 -0
  109. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/new_contest.py +0 -0
  110. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/plugin_common.py +0 -0
  111. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/select_contest.py +0 -0
  112. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/super_check_partial.py +0 -0
  113. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/lib/versiontest.py +0 -0
  114. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/logwindow.py +0 -0
  115. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/10_10_fall_cw.py +0 -0
  116. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/10_10_spring_cw.py +0 -0
  117. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/10_10_summer_phone.py +0 -0
  118. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/10_10_winter_phone.py +0 -0
  119. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/__init__.py +0 -0
  120. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_10m.py +0 -0
  121. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_dx_cw.py +0 -0
  122. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  123. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_field_day.py +0 -0
  124. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  125. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_ss_cw.py +0 -0
  126. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_ss_phone.py +0 -0
  127. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  128. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  129. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  130. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/canada_day.py +0 -0
  131. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_160_cw.py +0 -0
  132. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_160_ssb.py +0 -0
  133. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_wpx_cw.py +0 -0
  134. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  135. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_ww_cw.py +0 -0
  136. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cq_ww_ssb.py +0 -0
  137. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/cwt.py +0 -0
  138. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/general_logging.py +0 -0
  139. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/iaru_hf.py +0 -0
  140. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/jidx_cw.py +0 -0
  141. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/jidx_ph.py +0 -0
  142. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/naqp_cw.py +0 -0
  143. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/naqp_ssb.py +0 -0
  144. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/phone_weekly_test.py +0 -0
  145. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/stew_perry_topband.py +0 -0
  146. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/plugins/winter_field_day.py +0 -0
  147. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm/vfo.py +0 -0
  148. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/SOURCES.txt +0 -0
  149. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/dependency_links.txt +0 -0
  150. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/entry_points.txt +0 -0
  151. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/requires.txt +0 -0
  152. {not1mm-24.4.9.4 → not1mm-24.4.17}/not1mm.egg-info/top_level.txt +0 -0
  153. {not1mm-24.4.9.4 → not1mm-24.4.17}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.4.9.4
3
+ Version: 24.4.17
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
@@ -177,6 +177,8 @@ I wish to thank those who've contributed to the project.
177
177
 
178
178
  ## Recent Changes
179
179
 
180
+ - [24-4-17] Trap OSError if no sound device. Stop fsutils/appdata from creating useless .not1mm and .username folder structures on Linux platforms.
181
+ - [24-4-15] checkwindow.py Tighter results. Changed the call selection to use a single click.
180
182
  - [24-4-9-4] Check for portaudio instead of crash boom. Removed empty dockwidget. Tested on Plasma 6.
181
183
  - [24-4-9-3] Ugh. It's not a real day unless you forget to test.
182
184
  - [24-4-9-2] Put back the floatable dock widgets, 'cause Wayland strikes again.
@@ -224,7 +226,7 @@ pip install -U not1mm
224
226
  ```bash
225
227
  sudo apt update
226
228
  sudo apt upgrade
227
- sudo apt install -y libportaudio2 pipx
229
+ sudo apt install -y libportaudio2 pipx libxcb-cursor0
228
230
  pipx install not1mm
229
231
  pipx ensurepath
230
232
  ```
@@ -145,6 +145,8 @@ I wish to thank those who've contributed to the project.
145
145
 
146
146
  ## Recent Changes
147
147
 
148
+ - [24-4-17] Trap OSError if no sound device. Stop fsutils/appdata from creating useless .not1mm and .username folder structures on Linux platforms.
149
+ - [24-4-15] checkwindow.py Tighter results. Changed the call selection to use a single click.
148
150
  - [24-4-9-4] Check for portaudio instead of crash boom. Removed empty dockwidget. Tested on Plasma 6.
149
151
  - [24-4-9-3] Ugh. It's not a real day unless you forget to test.
150
152
  - [24-4-9-2] Put back the floatable dock widgets, 'cause Wayland strikes again.
@@ -192,7 +194,7 @@ pip install -U not1mm
192
194
  ```bash
193
195
  sudo apt update
194
196
  sudo apt upgrade
195
- sudo apt install -y libportaudio2 pipx
197
+ sudo apt install -y libportaudio2 pipx libxcb-cursor0
196
198
  pipx install not1mm
197
199
  pipx ensurepath
198
200
  ```
@@ -258,39 +258,43 @@ class CheckWindow(QDockWidget):
258
258
  filter(lambda x: x, [x.get("callsign", None) for x in spots]),
259
259
  )
260
260
 
261
- def populate_layout(self, layout, call_list):
261
+ def populate_layout(self, layout, call_list) -> None:
262
+ """Apply blackmagic to a layout."""
262
263
  for i in reversed(range(layout.count())):
263
264
  if layout.itemAt(i).widget():
264
265
  layout.itemAt(i).widget().setParent(None)
265
266
  else:
266
267
  layout.removeItem(layout.itemAt(i))
267
- labels = []
268
+ call_items = []
268
269
  for call in call_list:
269
270
  if call:
270
271
  if self.call:
271
272
  label_text = ""
273
+ diff_score = 0
272
274
  for tag, i1, i2, j1, j2 in Levenshtein.opcodes(call, self.call):
273
- # logger.debug('{:7} a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
274
- # tag, i1, i2, j1, j2, call[i1:i2], self.call[j1:j2]))
275
275
  if tag == "equal":
276
276
  label_text += call[i1:i2]
277
277
  continue
278
278
  elif tag == "replace":
279
279
  label_text += f"<span style='background-color: {self.character_remove_color};'>{call[i1:i2]}</span>"
280
+ diff_score += max((i2 - i1), (j2 - j1)) * (
281
+ len(call) + 1 - i2
282
+ )
280
283
  elif tag == "insert" or tag == "delete":
281
284
  label_text += f"<span style='background-color: {self.character_add_color};'>{call[i1:i2]}</span>"
282
- labels.append(
283
- (
284
- Levenshtein.hamming(call, self.call),
285
- CallLabel(
286
- label_text, call=call, callback=self.item_clicked
287
- ),
288
- )
289
- )
290
-
291
- for _, label in sorted(labels, key=lambda x: x[0]):
285
+ diff_score += max((i2 - i1), (j2 - j1)) * (len(call) - i2)
286
+ call_items.append((diff_score, label_text, call))
287
+
288
+ call_items = sorted(call_items, key=lambda x: x[0])
289
+ for i in reversed(range(layout.count())):
290
+ if layout.itemAt(i).widget():
291
+ layout.itemAt(i).widget().setParent(None)
292
+ else:
293
+ layout.removeItem(layout.itemAt(i))
294
+
295
+ for _, label_text, call in call_items:
296
+ label = CallLabel(label_text, call=call, callback=self.item_clicked)
292
297
  layout.addWidget(label)
293
- # top aligns
294
298
  layout.addStretch(0)
295
299
 
296
300
 
@@ -307,6 +311,6 @@ class CallLabel(QLabel):
307
311
  self.call = call
308
312
  self.callback = callback
309
313
 
310
- def mouseDoubleClickEvent(self, e: QMouseEvent) -> None:
314
+ def mouseReleaseEvent(self, e: QMouseEvent) -> None:
311
315
  if self.call and self.callback:
312
316
  self.callback(self.call)
@@ -1201,7 +1201,7 @@
1201
1201
  <string>club name</string>
1202
1202
  </property>
1203
1203
  <property name="placeholderText">
1204
- <string>Americal Radio Relay League</string>
1204
+ <string>American Radio Relay League</string>
1205
1205
  </property>
1206
1206
  </widget>
1207
1207
  </item>
@@ -11,27 +11,21 @@ import platform
11
11
  import sys
12
12
  import subprocess
13
13
  from pathlib import Path
14
-
15
14
  from appdata import AppDataPaths
16
15
 
17
16
  WORKING_PATH = Path(os.path.dirname(os.path.abspath(__file__)))
18
-
19
17
  MODULE_PATH = WORKING_PATH
20
-
21
-
22
18
  APP_DATA_PATH = MODULE_PATH / "data"
23
- _app_paths = AppDataPaths(name="not1mm")
24
- _app_paths.setup()
25
-
26
19
  DATA_PATH = os.environ.get("XDG_DATA_HOME", str(Path.home() / ".local" / "share"))
27
20
  DATA_PATH += "/not1mm"
28
21
  USER_DATA_PATH = Path(DATA_PATH)
29
- LOG_FILE = USER_DATA_PATH / "application.log"
30
22
  _CONFIG_PATH = os.environ.get("XDG_CONFIG_HOME", str(Path.home() / ".config"))
31
23
  _CONFIG_PATH += "/not1mm"
32
24
  CONFIG_PATH = Path(_CONFIG_PATH)
33
25
  CONFIG_FILE = CONFIG_PATH / "not1mm.json"
26
+ LOG_FILE = USER_DATA_PATH / "not1mm_debug.log"
34
27
 
28
+ # Create directories if they do not exist on Linux systems
35
29
  if platform.system() not in ["Windows", "Darwin"]:
36
30
  try:
37
31
  os.mkdir(CONFIG_PATH)
@@ -42,15 +36,16 @@ if platform.system() not in ["Windows", "Darwin"]:
42
36
  except FileExistsError:
43
37
  ...
44
38
 
39
+ # Define and create directories if they do not exist on Windows or Mac systems
45
40
  if platform.system() in ["Windows", "Darwin"]:
41
+ _app_paths = AppDataPaths(name="not1mm")
42
+ _app_paths.setup()
46
43
  LOG_FILE = _app_paths.get_log_file_path(name="appplication.log")
47
44
  _DATA_PATH = Path(_app_paths.app_data_path)
48
45
  USER_DATA_PATH = _DATA_PATH
49
46
  CONFIG_PATH = USER_DATA_PATH
50
47
  CONFIG_FILE = CONFIG_PATH / "not1mm.json"
51
48
 
52
- DARK_STYLESHEET = ""
53
-
54
49
 
55
50
  def openFileWithOS(file):
56
51
  """Open a file with the default program for that OS."""
@@ -60,4 +55,3 @@ def openFileWithOS(file):
60
55
  subprocess.Popen(["open", file])
61
56
  else:
62
57
  subprocess.Popen(["xdg-open", file])
63
- # os.system(f"xdg-open {fsutils.USER_DATA_PATH / macro_file}")
@@ -2,7 +2,13 @@
2
2
 
3
3
  import logging
4
4
  from PyQt6 import QtWidgets, uic
5
- import sounddevice as sd
5
+
6
+ try:
7
+ import sounddevice as sd
8
+ except OSError as exception:
9
+ print(exception)
10
+ print("portaudio is not installed")
11
+ sd = None
6
12
 
7
13
 
8
14
  class Settings(QtWidgets.QDialog):
@@ -15,7 +21,10 @@ class Settings(QtWidgets.QDialog):
15
21
  uic.loadUi(app_data_path / "configuration.ui", self)
16
22
  self.buttonBox.accepted.connect(self.save_changes)
17
23
  self.preference = pref
18
- self.devices = sd.query_devices()
24
+ if sd:
25
+ self.devices = sd.query_devices()
26
+ else:
27
+ self.devices = []
19
28
  self.setup()
20
29
 
21
30
  def setup(self):
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.4.17"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.4.9.4
3
+ Version: 24.4.17
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
@@ -177,6 +177,8 @@ I wish to thank those who've contributed to the project.
177
177
 
178
178
  ## Recent Changes
179
179
 
180
+ - [24-4-17] Trap OSError if no sound device. Stop fsutils/appdata from creating useless .not1mm and .username folder structures on Linux platforms.
181
+ - [24-4-15] checkwindow.py Tighter results. Changed the call selection to use a single click.
180
182
  - [24-4-9-4] Check for portaudio instead of crash boom. Removed empty dockwidget. Tested on Plasma 6.
181
183
  - [24-4-9-3] Ugh. It's not a real day unless you forget to test.
182
184
  - [24-4-9-2] Put back the floatable dock widgets, 'cause Wayland strikes again.
@@ -224,7 +226,7 @@ pip install -U not1mm
224
226
  ```bash
225
227
  sudo apt update
226
228
  sudo apt upgrade
227
- sudo apt install -y libportaudio2 pipx
229
+ sudo apt install -y libportaudio2 pipx libxcb-cursor0
228
230
  pipx install not1mm
229
231
  pipx ensurepath
230
232
  ```
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.4.9.4"
7
+ version = "24.4.17"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +0,0 @@
1
- """It's the version"""
2
-
3
- __version__ = "24.4.9.4"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes