not1mm 24.3.9__py3-none-any.whl → 24.3.19__py3-none-any.whl
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/__main__.py +2 -4
- not1mm/data/new_contest.ui +11 -1
- not1mm/data/not1mm.html +46 -108
- not1mm/lib/database.py +14 -0
- not1mm/lib/plugin_common.py +29 -2
- not1mm/lib/version.py +1 -1
- not1mm/plugins/10_10_fall_cw.py +2 -0
- not1mm/plugins/10_10_spring_cw.py +2 -0
- not1mm/plugins/10_10_summer_phone.py +2 -0
- not1mm/plugins/10_10_winter_phone.py +2 -0
- not1mm/plugins/arrl_10m.py +2 -0
- not1mm/plugins/arrl_dx_cw.py +2 -0
- not1mm/plugins/arrl_dx_ssb.py +2 -0
- not1mm/plugins/arrl_field_day.py +2 -0
- not1mm/plugins/arrl_ss_cw.py +2 -0
- not1mm/plugins/arrl_ss_phone.py +2 -0
- not1mm/plugins/arrl_vhf_jan.py +2 -0
- not1mm/plugins/arrl_vhf_jun.py +2 -0
- not1mm/plugins/arrl_vhf_sep.py +2 -0
- not1mm/plugins/canada_day.py +2 -0
- not1mm/plugins/cq_160_cw.py +411 -0
- not1mm/plugins/cq_160_ssb.py +411 -0
- not1mm/plugins/cq_wpx_cw.py +2 -0
- not1mm/plugins/cq_wpx_ssb.py +2 -0
- not1mm/plugins/cq_ww_cw.py +2 -0
- not1mm/plugins/cq_ww_ssb.py +2 -0
- not1mm/plugins/cwt.py +2 -0
- not1mm/plugins/iaru_hf.py +2 -0
- not1mm/plugins/jidx_cw.py +2 -0
- not1mm/plugins/jidx_ph.py +2 -0
- not1mm/plugins/naqp_cw.py +2 -0
- not1mm/plugins/naqp_ssb.py +2 -0
- not1mm/plugins/phone_weekly_test.py +2 -0
- not1mm/plugins/stew_perry_topband.py +2 -0
- not1mm/plugins/winter_field_day.py +2 -0
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/METADATA +7 -1
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/RECORD +43 -40
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/WHEEL +1 -1
- testing/detectdark.py +35 -0
- testing/test.py +13 -11
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/LICENSE +0 -0
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/entry_points.txt +0 -0
- {not1mm-24.3.9.dist-info → not1mm-24.3.19.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -1173,8 +1173,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1173
1173
|
"[F1-F12]\tSend (CW or Voice) macros.\n"
|
1174
1174
|
"[CTRL-G]\tTune to a spot matching partial text in the callsign\n"
|
1175
1175
|
"\tentry field (CAT Required).\n"
|
1176
|
-
"[CTRL-
|
1176
|
+
"[CTRL-M]\tMark Callsign to the bandmap window to work later."
|
1177
1177
|
"[CTRL-S]\tSpot Callsign to the cluster.\n"
|
1178
|
+
"[CTRL-SHIFT-K] Open CW text input field.\n"
|
1178
1179
|
)
|
1179
1180
|
|
1180
1181
|
def filepicker(self, action: str) -> str:
|
@@ -2477,8 +2478,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2477
2478
|
stripped_text = text.strip().replace(" ", "")
|
2478
2479
|
self.callsign.setText(stripped_text)
|
2479
2480
|
self.callsign.setCursorPosition(position)
|
2480
|
-
results = self.mscp.super_check(stripped_text)
|
2481
|
-
logger.debug(f"{results}")
|
2482
2481
|
|
2483
2482
|
if " " in text:
|
2484
2483
|
if stripped_text == "CW":
|
@@ -3013,7 +3012,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3013
3012
|
None
|
3014
3013
|
"""
|
3015
3014
|
|
3016
|
-
# https://www.cqwpx.com/cabrillo.htm
|
3017
3015
|
logger.debug("******Cabrillo*****")
|
3018
3016
|
self.contest.cabrillo(self)
|
3019
3017
|
|
not1mm/data/new_contest.ui
CHANGED
@@ -262,6 +262,16 @@
|
|
262
262
|
<string>CANADA DAY</string>
|
263
263
|
</property>
|
264
264
|
</item>
|
265
|
+
<item>
|
266
|
+
<property name="text">
|
267
|
+
<string>CQ 160 CW</string>
|
268
|
+
</property>
|
269
|
+
</item>
|
270
|
+
<item>
|
271
|
+
<property name="text">
|
272
|
+
<string>CQ 160 SSB</string>
|
273
|
+
</property>
|
274
|
+
</item>
|
265
275
|
<item>
|
266
276
|
<property name="text">
|
267
277
|
<string>CQ WPX CW</string>
|
@@ -336,7 +346,7 @@
|
|
336
346
|
</property>
|
337
347
|
<property name="time">
|
338
348
|
<time>
|
339
|
-
<hour>
|
349
|
+
<hour>16</hour>
|
340
350
|
<minute>0</minute>
|
341
351
|
<second>0</second>
|
342
352
|
</time>
|
not1mm/data/not1mm.html
CHANGED
@@ -152,23 +152,24 @@ figure figcaption {
|
|
152
152
|
<div class="header"></div><div class="inner">
|
153
153
|
<h2 id="toc_1">Not1MM</h2>
|
154
154
|
|
155
|
+
<p>The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<sup></p>
|
155
156
|
|
156
157
|
<h3 id="toc_1.1">What and why is Not1MM</h3>
|
157
158
|
|
158
|
-
<p>Not1MM's interface is a
|
159
|
+
<p>Not1MM's interface is a blatant ripoff of N1MM.
|
159
160
|
It is NOT N1MM and any problem you have with this software should in no way reflect on their software.</p>
|
160
161
|
|
161
|
-
<p>If you use Windows(tm) you should run away from
|
162
|
+
<p>If you use Windows(tm), you should run away from Not1MM and use someother program.</p>
|
162
163
|
|
163
|
-
<p>I personally don't. While it may be possible to get N1MM working under Wine, I haven't checked
|
164
|
+
<p>I personally don't use Windows(tm). While it may be possible to get N1MM working under Wine, I haven't checked. I'd rather not have to jump thru the hoops.</p>
|
164
165
|
|
165
166
|
<p><strong>Currently this exists for my own personal amusement</strong>.
|
166
167
|
Something to do in my free time.
|
167
|
-
While I'm not watching TV, Right vs Left political 'News' programs, mind numbing 'Reality'
|
168
|
+
While I'm not watching TV, Right vs Left political 'News' programs, mind numbing 'Reality' shows etc...</p>
|
168
169
|
|
169
170
|
<h3 id="toc_1.2">Current state</h3>
|
170
171
|
|
171
|
-
<p>The current state is <q><strong>BETA</strong></q>. I've used it for
|
172
|
+
<p>The current state is <q><strong>BETA</strong></q>. I've used it for a few contests, and was able to work contacts and submit a cabrillo at the end. I'm not a <q>Contester</q>. So I'll add contests as/if I work them. I'm only one guy, so if you see a bug let me know. I don't do much of any Data or RTTY operating. This is why you don't see RTTY in the list of working contests. The Lord helps those who burn people at the... I mean who help themselves. Feel free to fill in that hole with a pull request.</p>
|
172
173
|
|
173
174
|
<h3 id="toc_1.4">List of should be working contests</h3>
|
174
175
|
|
@@ -178,11 +179,15 @@ While I'm not watching TV, Right vs Left political 'News' programs,
|
|
178
179
|
<li>10 10 Spring CW</li>
|
179
180
|
<li>10 10 Summer Phone</li>
|
180
181
|
<li>10 10 Winter Phone</li>
|
182
|
+
<li>ARRL 10M</li>
|
181
183
|
<li>ARRL DX CW</li>
|
182
184
|
<li>ARRL DX SSB</li>
|
183
185
|
<li>ARRL Field Day</li>
|
184
186
|
<li>ARRL Sweepstakes CW</li>
|
185
187
|
<li>ARRL Sweepstakes SSB</li>
|
188
|
+
<li>ARRL VHF January</li>
|
189
|
+
<li>ARRL VHF June</li>
|
190
|
+
<li>ARRL VHF September</li>
|
186
191
|
<li>CQ WPX CW</li>
|
187
192
|
<li>CQ WPX SSB</li>
|
188
193
|
<li>CQ World Wide CW</li>
|
@@ -193,77 +198,22 @@ While I'm not watching TV, Right vs Left political 'News' programs,
|
|
193
198
|
<li>Japan International DX SSB</li>
|
194
199
|
<li>NAQP CW</li>
|
195
200
|
<li>NAQP SSB</li>
|
201
|
+
<li>Phone Weekly Test</li>
|
196
202
|
<li>RAC Canada Day</li>
|
203
|
+
<li>Stew Perry Topband</li>
|
204
|
+
<li>Winter Field Day</li>
|
197
205
|
</ul>
|
198
206
|
|
199
207
|
<h3 id="toc_1.5">Recent Changes</h3>
|
200
208
|
|
201
209
|
<ul dir="auto">
|
202
|
-
<li>[
|
203
|
-
<li>[
|
204
|
-
<li>[
|
205
|
-
<li>[
|
210
|
+
<li>[24-3-9] Marked calls in the bandmap window colored Blue, until worked.</li>
|
211
|
+
<li>[24-3-7] Merged PR from @arodland for faster fuzzy SCP lookups.</li>
|
212
|
+
<li>[24-3-2-1] Added marking stations on the bandmap to work later with CTRL-M.</li>
|
213
|
+
<li>[24-3-2] Merged PR from @arodland for fuzzy SCP lookup.</li>
|
206
214
|
</ul>
|
207
215
|
|
208
|
-
<h3 id="toc_1.6">
|
209
|
-
|
210
|
-
<h4 id="toc_1.6.1">Python and pip</h4>
|
211
|
-
|
212
|
-
<p>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 <a href="https://packaging.python.org/en/latest/tutorials/installing-packages/">The PyPA</a>. 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 <code>sudo apt install python3-pip</code> or <code>sudo dnf install python3-pip</code>.</p>
|
213
|
-
|
214
|
-
<h4 id="toc_1.6.2">Installing with pip</h4>
|
215
|
-
|
216
|
-
<p>I've included what installation steps I took to install on fresh images of Ubuntu and Fedora below. YMMV.</p>
|
217
|
-
|
218
|
-
<h5 id="toc_1.6.2.4">Ubuntu 22.04 LTS</h5>
|
219
|
-
|
220
|
-
<pre><code class="language-bash">sudo apt update
|
221
|
-
sudo apt upgrade
|
222
|
-
sudo apt install -y libportaudio2 python3-pip python3-pyqt5 python3-numpy adwaita-qt
|
223
|
-
pip install -U not1mm
|
224
|
-
</code></pre>
|
225
|
-
|
226
|
-
<h5 id="toc_1.6.2.4">Ubuntu 23.04</h5>
|
227
|
-
|
228
|
-
<pre><code class="language-bash">sudo apt update
|
229
|
-
sudo apt upgrade
|
230
|
-
sudo apt install -y libportaudio2 adwaita-qt pipx
|
231
|
-
pipx install not1mm
|
232
|
-
pipx ensurepath
|
233
|
-
</code></pre>
|
234
|
-
|
235
|
-
<h5 id="toc_1.6.2.4">Fedora 38</h5>
|
236
|
-
|
237
|
-
<pre><code class="language-bash">sudo dnf upgrade --refresh
|
238
|
-
sudo dnf install python3-pip portaudio
|
239
|
-
pip install not1mm
|
240
|
-
</code></pre>
|
241
|
-
|
242
|
-
<p>You can now open a new terminal and type <code>not1mm</code>. On it's first run, it may or may not install a lovely non AI generated
|
243
|
-
icon, which you can later click on to launch the application.</p>
|
244
|
-
|
245
|
-
<h4 id="toc_1.6.3">You may or may not get a warning message like</h4>
|
246
|
-
|
247
|
-
<pre><code class="language-text">WARNING: The script not1mm is installed in '/home/mbridak/.local/bin' which is not on PATH.
|
248
|
-
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
|
249
|
-
</code></pre>
|
250
|
-
|
251
|
-
<p>If you do, just logout and back in, or reboot.</p>
|
252
|
-
|
253
|
-
<h4 id="toc_1.6.4">Or this fan favorite</h4>
|
254
|
-
|
255
|
-
<pre><code class="language-text">Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
|
256
|
-
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
|
257
|
-
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
|
258
|
-
</code></pre>
|
259
|
-
|
260
|
-
<p>To avoid this you can export an environment variable and launch the app like this:</p>
|
261
|
-
|
262
|
-
<p><code>mbridak@vm:~$ export QT_QPA_PLATFORM=wayland; not1mm</code></p>
|
263
|
-
|
264
|
-
<p>For a more permanent solution you can place the line <code>export QT_QPA_PLATFORM=wayland</code> in your home directories .bashrc file. Then after logging out and back in you should be able to launch it normally.</p>
|
265
|
-
|
266
|
-
<h4 id="toc_1.6.5">Updating with pip/pipx</h4>
|
216
|
+
<h3 id="toc_1.6.5">Updating with pip/pipx</h3>
|
267
217
|
|
268
218
|
<p>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 <code>pip install -U not1mm</code> or if installed with pipx <code>pipx upgrade not1mm</code>.</p>
|
269
219
|
|
@@ -271,7 +221,7 @@ This application failed to start because no Qt platform plugin could be initiali
|
|
271
221
|
|
272
222
|
<p>The audio library used, uses pipewire/portaudio. You may need to install portaudio. Ubuntu: <code>sudo apt install libportaudio2</code></p>
|
273
223
|
|
274
|
-
<
|
224
|
+
<h3 id="toc_1.7.1">Dark mode on Ubuntu</h3>
|
275
225
|
|
276
226
|
<p>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 <code>QT_STYLE_OVERRIDE</code> to <code>Adwaita-Dark</code>. 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.</p>
|
277
227
|
|
@@ -279,30 +229,6 @@ This application failed to start because no Qt platform plugin could be initiali
|
|
279
229
|
|
280
230
|
<p>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.</p>
|
281
231
|
|
282
|
-
<h3 id="toc_1.9">Running from source</h3>
|
283
|
-
|
284
|
-
<p>Since this is packaged for PyPi, if you want to work on your own source branch, after cloning from github you would:</p>
|
285
|
-
|
286
|
-
<pre><code class="language-bash">pip install --upgrade pip
|
287
|
-
pip install setuptools
|
288
|
-
pip install build
|
289
|
-
source rebuild.sh
|
290
|
-
</code></pre>
|
291
|
-
|
292
|
-
<p>from the root directory. This installs a build chain and a local editable copy of not1mm.</p>
|
293
|
-
|
294
|
-
<p>There's two ways to launch the program from the local editable copy.</p>
|
295
|
-
|
296
|
-
<p>You can either be in the root of the source directory and type:</p>
|
297
|
-
|
298
|
-
<pre><code class="language-bash">python not1mm
|
299
|
-
</code></pre>
|
300
|
-
|
301
|
-
<p>or be in some other directory and just type:</p>
|
302
|
-
|
303
|
-
<pre><code class="language-bash">not1mm
|
304
|
-
</code></pre>
|
305
|
-
|
306
232
|
<h3 id="toc_1.10">Various data file locations</h3>
|
307
233
|
|
308
234
|
<h4 id="toc_1.10.1">Data</h4>
|
@@ -335,12 +261,6 @@ source rebuild.sh
|
|
335
261
|
|
336
262
|
<p>After initial run of the program or creating a new database you will need to fill out the Station Settings dialog that will pop up.</p>
|
337
263
|
|
338
|
-
<p>You can fill it out if you want to. You can leave our friends behind. 'Cause your friends don't fill, and if they don't fill. Well, they're no friends of mine.</p>
|
339
|
-
|
340
|
-
<p>You can fill. You can fill. Everyone look at your keys.</p>
|
341
|
-
|
342
|
-
<p><a href="https://www.youtube.com/watch?v=nM4okRvCg2g"><strong>I forgot my hat today</strong></a>.</p>
|
343
|
-
|
344
264
|
<h4 id="toc_1.12.1">Changing station information</h4>
|
345
265
|
|
346
266
|
<p>Station information can be changed any time by going to <code>File</code> > <code>Station Settings</code> and editing the information.</p>
|
@@ -363,7 +283,7 @@ source rebuild.sh
|
|
363
283
|
|
364
284
|
<p>The tabs for groups and n1mm are disabled and are for future expansion.</p>
|
365
285
|
|
366
|
-
|
286
|
+
<<h4 id="toc_1.16.1">Lookup</h4>
|
367
287
|
|
368
288
|
<p>For callsign lookup, Two services are supported. QRZ and HamQTH. They require a username and password, Enter it here.</p>
|
369
289
|
|
@@ -373,7 +293,7 @@ source rebuild.sh
|
|
373
293
|
|
374
294
|
<h4 id="toc_1.16.3">CAT</h4>
|
375
295
|
|
376
|
-
<p>Under the <code>CAT</code> TAB, you can choose either <code>rigctld</code> normally with an IP of <code>127.0.0.1</code> and a port of <code>4532</code>. Or <code>flrig</code>, IP normally of <code>127.0.0.1</code> and a port of <code>12345</code>. <code>None</code> is always an option, but is it really
|
296
|
+
<p>Under the <code>CAT</code> TAB, you can choose either <code>rigctld</code> normally with an IP of <code>127.0.0.1</code> and a port of <code>4532</code>. Or <code>flrig</code>, IP normally of <code>127.0.0.1</code> and a port of <code>12345</code>. <code>None</code> is always an option, but is it really? There's an onscreen icon for CAT status. Green good, Red bad, Grey neither.</p>
|
377
297
|
|
378
298
|
<h4 id="toc_1.16.4">CW Keyer interface</h4>
|
379
299
|
|
@@ -389,11 +309,13 @@ source rebuild.sh
|
|
389
309
|
|
390
310
|
<p>When entering IP and Ports, enter them with a colon ':' between them. You can enter multiple pairs on the same line if separated by a space ' '.</p>
|
391
311
|
|
392
|
-
<
|
312
|
+
<h4 id="toc_1.16.7">Bands</h4>
|
313
|
+
|
314
|
+
<p>You can define which bands appear in the main window. Those with checkmarks will appear. Those without will not.</p>
|
393
315
|
|
394
|
-
<
|
316
|
+
<h3 id="toc_1.17">Sending CW</h3>
|
395
317
|
|
396
|
-
<p>
|
318
|
+
<p>Other than sending CW by hand, you can also send predefined CW text messages by pressing F1 - F12. See next section on Editing macro keys. If you need to send something freeform, you can press CTRL-SHIFT-K, this will expose an entry field at the bottom of the window which you can type directly into. When you're done you can either press CTRL-SHIFT-K again, or press the Enter Key to close the field.</p>
|
397
319
|
|
398
320
|
<h3 id="toc_1.18">Editing macro keys</h3>
|
399
321
|
|
@@ -529,9 +451,17 @@ source rebuild.sh
|
|
529
451
|
<td>Spot Callsign to the cluster.</td>
|
530
452
|
</tr>
|
531
453
|
<tr>
|
454
|
+
<td>[CTRL-M]</td>
|
455
|
+
<td>Mark Callsign to the bandmap window to work later.</td>
|
456
|
+
</tr>
|
457
|
+
<tr>
|
532
458
|
<td>[CTRL-G]</td>
|
533
459
|
<td>Tune to a spot matching partial text in the callsign entry field (CAT Required).</td>
|
534
460
|
</tr>
|
461
|
+
<tr>
|
462
|
+
<td>[CTRL-SHIFT-K]</td>
|
463
|
+
<td>Open CW text input field.</td>
|
464
|
+
</tr>
|
535
465
|
</tbody>
|
536
466
|
</table>
|
537
467
|
|
@@ -582,17 +512,23 @@ source rebuild.sh
|
|
582
512
|
<li>Then... <code>Window</code>><code>VFO</code></li>
|
583
513
|
</ol>
|
584
514
|
|
515
|
+
<p><img src="https://github.com/mbridak/not1mm/raw/master/pic/vfo.png" alt="VFO"></p>
|
516
|
+
|
585
517
|
<h3 id="toc_1.26">Cabrillo</h3>
|
586
518
|
|
587
519
|
<p>Click on <code>File</code> > <code>Generate Cabrillo</code></p>
|
588
520
|
|
589
521
|
<p>The file will be placed in your home directory. The name will be in the format of:</p>
|
590
522
|
|
591
|
-
<p><code>StationCall</code>_<code>ContestName</code>.log</p>
|
523
|
+
<p><code>StationCall</code>_<code>ContestName</code>_<code>CurrentDate</code>_<code>CurrentTime</code>.log</p>
|
524
|
+
|
525
|
+
<p>So for me it would look like:</p>
|
592
526
|
|
593
|
-
<p>
|
527
|
+
<p>K6GTE_CANADA-DAY_2023-09-04_07-47-05.log</p>
|
594
528
|
|
595
|
-
<p>
|
529
|
+
<p>Look, a log <a href="https://www.youtube.com/watch?v=El41sHXck-E">eh</a>?</p>
|
530
|
+
|
531
|
+
<p><a href="https://www.youtube.com/watch?v=oMI23JJUpGE">This</a> outlines some differences between ARRL Field Day and Canada Day.</p>
|
596
532
|
|
597
533
|
<h3 id="toc_1.27">ADIF</h3>
|
598
534
|
|
@@ -600,7 +536,7 @@ source rebuild.sh
|
|
600
536
|
|
601
537
|
<p>Boom... ADIF</p>
|
602
538
|
|
603
|
-
<p><code>StationCall</code>_<code>ContestName</code>.adi</p>
|
539
|
+
<p><code>StationCall</code>_<code>ContestName</code>_<code>Date</code>_<code>Time</code>.adi</p>
|
604
540
|
|
605
541
|
<h3 id="toc_1.28">Dupe checking</h3>
|
606
542
|
|
@@ -616,6 +552,8 @@ source rebuild.sh
|
|
616
552
|
|
617
553
|
<p>This was a pain in the tukus. There are so many elements to the exchange, and one input field aside from the callsign field. So I had to write sort of a 'parser'. The parser moves over your input string following some basic rules and is re-evaluated with each keypress and the parsed result will be displayed in the label over the field. The exchange looks like <code>124 A K6GTE 17 ORG</code>, a Serial number, Precidence, Callsign, Year Licenced and Section. even though the callsign is given as part of the exchange, the callsign does not have to be entered and is pulled from the callsign field. If the exchange was entered as <code>124 A 17 ORG</code> you would see:</p>
|
618
554
|
|
555
|
+
<p><img src="https://github.com/mbridak/not1mm/raw/master/pic/ss_parser_1.png" alt="SS Parser Result"></p>
|
556
|
+
|
619
557
|
<p>You can enter the serial number and precidence, or the year and section as pairs. For instance <code>124A 17ORG</code>. This would ensure the values get parsed correctly.</p>
|
620
558
|
|
621
559
|
<p>You do not have to go back to correct typing. You can just tack the correct items to the end of the field and the older values will get overwritten. So if you entered <code>124A 17ORG Q</code>, the precidence will change from A to Q. If you need to change the serial number you must append the precidence to it, <code>125A</code>.</p>
|
not1mm/lib/database.py
CHANGED
@@ -869,6 +869,20 @@ class DataBase:
|
|
869
869
|
logger.debug("%s", exception)
|
870
870
|
return {}
|
871
871
|
|
872
|
+
def fetch_mult1_count(self) -> dict:
|
873
|
+
"""return QSO count"""
|
874
|
+
try:
|
875
|
+
with sqlite3.connect(self.database) as conn:
|
876
|
+
conn.row_factory = self.row_factory
|
877
|
+
cursor = conn.cursor()
|
878
|
+
cursor.execute(
|
879
|
+
f"select count(*) as count from dxlog where IsMultiplier1 = 1 and ContestNR = {self.current_contest};"
|
880
|
+
)
|
881
|
+
return cursor.fetchone()
|
882
|
+
except sqlite3.OperationalError as exception:
|
883
|
+
logger.debug("%s", exception)
|
884
|
+
return {}
|
885
|
+
|
872
886
|
def fetch_qso_count(self) -> dict:
|
873
887
|
"""return QSO count"""
|
874
888
|
try:
|
not1mm/lib/plugin_common.py
CHANGED
@@ -36,6 +36,8 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
|
|
36
36
|
hisname = contact.get("Name", "")
|
37
37
|
the_date_and_time = contact.get("TS", "")
|
38
38
|
themode = contact.get("Mode", "")
|
39
|
+
if themode == "CWR":
|
40
|
+
themode = "CW"
|
39
41
|
frequency = str(Decimal(str(contact.get("Freq", 0))) / 1000)
|
40
42
|
band = get_adif_band(Decimal(str(contact.get("Freq", 0))) / 1000)
|
41
43
|
sentrst = contact.get("SNT", "")
|
@@ -43,6 +45,7 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
|
|
43
45
|
sentnr = str(contact.get("SentNr", "0"))
|
44
46
|
rcvnr = str(contact.get("NR", "0"))
|
45
47
|
grid = contact.get("GridSquare", "")
|
48
|
+
pfx = contact.get("CountryPrefix", "")
|
46
49
|
comment = contact.get("Comment", "")
|
47
50
|
loggeddate = the_date_and_time[:10]
|
48
51
|
loggedtime = (
|
@@ -175,6 +178,19 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
|
|
175
178
|
except TypeError:
|
176
179
|
...
|
177
180
|
|
181
|
+
# cabrillo_name = "CQ-160-CW"
|
182
|
+
try:
|
183
|
+
if cabrillo_name in ("CQ-160-CW", "CQ-160-SSB"):
|
184
|
+
rcv = f"{contact.get('Exchange1', '')}"
|
185
|
+
if len(rcv) > 1:
|
186
|
+
print(
|
187
|
+
f"<SRX_STRING:{len(rcv)}>{rcv.upper()}",
|
188
|
+
end="\r\n",
|
189
|
+
file=file_descriptor,
|
190
|
+
)
|
191
|
+
except TypeError:
|
192
|
+
...
|
193
|
+
|
178
194
|
try:
|
179
195
|
if len(grid) > 1:
|
180
196
|
print(
|
@@ -185,6 +201,16 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
|
|
185
201
|
except TypeError:
|
186
202
|
...
|
187
203
|
|
204
|
+
try:
|
205
|
+
if len(pfx) > 0:
|
206
|
+
print(
|
207
|
+
f"<PFX:{len(pfx)}>{pfx}",
|
208
|
+
end="\r\n",
|
209
|
+
file=file_descriptor,
|
210
|
+
)
|
211
|
+
except TypeError:
|
212
|
+
...
|
213
|
+
|
188
214
|
try:
|
189
215
|
if len(contest_id) > 1:
|
190
216
|
print(
|
@@ -207,5 +233,6 @@ def gen_adif(self, cabrillo_name: str, contest_id=""):
|
|
207
233
|
|
208
234
|
print("<EOR>", end="\r\n", file=file_descriptor)
|
209
235
|
print("", end="\r\n", file=file_descriptor)
|
210
|
-
|
211
|
-
|
236
|
+
self.show_message_box(f"ADIF saved to: {filename}")
|
237
|
+
except IOError as error:
|
238
|
+
self.show_message_box(f"Error saving ADIF file: {error}")
|
not1mm/lib/version.py
CHANGED
not1mm/plugins/10_10_fall_cw.py
CHANGED
@@ -331,8 +331,10 @@ def cabrillo(self):
|
|
331
331
|
file=file_descriptor,
|
332
332
|
)
|
333
333
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
334
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
334
335
|
except IOError as exception:
|
335
336
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
337
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
336
338
|
return
|
337
339
|
|
338
340
|
|
@@ -331,8 +331,10 @@ def cabrillo(self):
|
|
331
331
|
file=file_descriptor,
|
332
332
|
)
|
333
333
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
334
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
334
335
|
except IOError as exception:
|
335
336
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
337
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
336
338
|
return
|
337
339
|
|
338
340
|
|
@@ -332,8 +332,10 @@ def cabrillo(self):
|
|
332
332
|
file=file_descriptor,
|
333
333
|
)
|
334
334
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
335
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
335
336
|
except IOError as exception:
|
336
337
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
338
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
337
339
|
return
|
338
340
|
|
339
341
|
|
@@ -332,8 +332,10 @@ def cabrillo(self):
|
|
332
332
|
file=file_descriptor,
|
333
333
|
)
|
334
334
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
335
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
335
336
|
except IOError as exception:
|
336
337
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
338
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
337
339
|
return
|
338
340
|
|
339
341
|
|
not1mm/plugins/arrl_10m.py
CHANGED
@@ -414,8 +414,10 @@ def cabrillo(self):
|
|
414
414
|
file=file_descriptor,
|
415
415
|
)
|
416
416
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
417
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
417
418
|
except IOError as exception:
|
418
419
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
420
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
419
421
|
return
|
420
422
|
|
421
423
|
|
not1mm/plugins/arrl_dx_cw.py
CHANGED
@@ -356,8 +356,10 @@ def cabrillo(self):
|
|
356
356
|
file=file_descriptor,
|
357
357
|
)
|
358
358
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
359
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
359
360
|
except IOError as exception:
|
360
361
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
362
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
361
363
|
return
|
362
364
|
|
363
365
|
|
not1mm/plugins/arrl_dx_ssb.py
CHANGED
@@ -356,8 +356,10 @@ def cabrillo(self):
|
|
356
356
|
file=file_descriptor,
|
357
357
|
)
|
358
358
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
359
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
359
360
|
except IOError as exception:
|
360
361
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
362
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
361
363
|
return
|
362
364
|
|
363
365
|
|
not1mm/plugins/arrl_field_day.py
CHANGED
@@ -308,8 +308,10 @@ def cabrillo(self):
|
|
308
308
|
file=file_descriptor,
|
309
309
|
)
|
310
310
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
311
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
311
312
|
except IOError as exception:
|
312
313
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
314
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
313
315
|
return
|
314
316
|
|
315
317
|
|
not1mm/plugins/arrl_ss_cw.py
CHANGED
@@ -346,8 +346,10 @@ def cabrillo(self):
|
|
346
346
|
file=file_descriptor,
|
347
347
|
)
|
348
348
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
349
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
349
350
|
except IOError as exception:
|
350
351
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
352
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
351
353
|
return
|
352
354
|
|
353
355
|
|
not1mm/plugins/arrl_ss_phone.py
CHANGED
@@ -346,8 +346,10 @@ def cabrillo(self):
|
|
346
346
|
file=file_descriptor,
|
347
347
|
)
|
348
348
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
349
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
349
350
|
except IOError as exception:
|
350
351
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
352
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
351
353
|
return
|
352
354
|
|
353
355
|
|
not1mm/plugins/arrl_vhf_jan.py
CHANGED
@@ -390,8 +390,10 @@ def cabrillo(self):
|
|
390
390
|
file=file_descriptor,
|
391
391
|
)
|
392
392
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
393
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
393
394
|
except IOError as exception:
|
394
395
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
396
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
395
397
|
return
|
396
398
|
|
397
399
|
|
not1mm/plugins/arrl_vhf_jun.py
CHANGED
@@ -358,8 +358,10 @@ def cabrillo(self):
|
|
358
358
|
file=file_descriptor,
|
359
359
|
)
|
360
360
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
361
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
361
362
|
except IOError as exception:
|
362
363
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
364
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
363
365
|
return
|
364
366
|
|
365
367
|
|
not1mm/plugins/arrl_vhf_sep.py
CHANGED
@@ -358,8 +358,10 @@ def cabrillo(self):
|
|
358
358
|
file=file_descriptor,
|
359
359
|
)
|
360
360
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
361
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
361
362
|
except IOError as exception:
|
362
363
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
364
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
363
365
|
return
|
364
366
|
|
365
367
|
|
not1mm/plugins/canada_day.py
CHANGED
@@ -388,8 +388,10 @@ def cabrillo(self):
|
|
388
388
|
file=file_descriptor,
|
389
389
|
)
|
390
390
|
print("END-OF-LOG:", end="\r\n", file=file_descriptor)
|
391
|
+
self.show_message_box(f"Cabrillo saved to: {filename}")
|
391
392
|
except IOError as exception:
|
392
393
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
394
|
+
self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
|
393
395
|
return
|
394
396
|
|
395
397
|
|