not1mm 24.10.24.1__py3-none-any.whl → 24.10.26__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 +9 -3
- not1mm/bandmap.py +6 -1
- not1mm/data/main.ui +23 -3
- not1mm/lib/version.py +1 -1
- not1mm/plugins/10_10_fall_cw.py +109 -82
- not1mm/plugins/10_10_spring_cw.py +109 -82
- not1mm/plugins/10_10_summer_phone.py +109 -82
- not1mm/plugins/10_10_winter_phone.py +109 -82
- not1mm/plugins/arrl_10m.py +109 -82
- not1mm/plugins/arrl_dx_cw.py +109 -82
- not1mm/plugins/arrl_dx_ssb.py +109 -82
- not1mm/plugins/arrl_field_day.py +109 -82
- not1mm/plugins/arrl_ss_cw.py +109 -82
- not1mm/plugins/arrl_ss_phone.py +109 -82
- not1mm/plugins/arrl_vhf_jan.py +109 -82
- not1mm/plugins/arrl_vhf_jun.py +109 -82
- not1mm/plugins/arrl_vhf_sep.py +109 -82
- not1mm/plugins/canada_day.py +109 -82
- not1mm/plugins/cq_160_cw.py +109 -74
- not1mm/plugins/cq_160_ssb.py +109 -74
- not1mm/plugins/cq_wpx_cw.py +109 -82
- not1mm/plugins/cq_wpx_rtty.py +109 -82
- not1mm/plugins/cq_wpx_ssb.py +109 -82
- not1mm/plugins/cq_ww_cw.py +115 -83
- not1mm/plugins/cq_ww_rtty.py +110 -73
- not1mm/plugins/cq_ww_ssb.py +109 -82
- not1mm/plugins/cwt.py +109 -82
- not1mm/plugins/general_logging.py +1 -1
- not1mm/plugins/helvetia.py +109 -82
- not1mm/plugins/iaru_fieldday_r1_cw.py +109 -82
- not1mm/plugins/iaru_fieldday_r1_ssb.py +109 -82
- not1mm/plugins/iaru_hf.py +109 -82
- not1mm/plugins/icwc_mst.py +109 -82
- not1mm/plugins/jidx_cw.py +74 -48
- not1mm/plugins/jidx_ph.py +74 -48
- not1mm/plugins/k1usn_sst.py +109 -82
- not1mm/plugins/naqp_cw.py +109 -82
- not1mm/plugins/naqp_rtty.py +109 -82
- not1mm/plugins/naqp_ssb.py +109 -82
- not1mm/plugins/phone_weekly_test.py +109 -82
- not1mm/plugins/ref_cw.py +109 -82
- not1mm/plugins/ref_ssb.py +109 -82
- not1mm/plugins/stew_perry_topband.py +109 -82
- not1mm/plugins/weekly_rtty.py +109 -82
- not1mm/plugins/winter_field_day.py +109 -82
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/METADATA +3 -1
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/RECORD +51 -51
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/LICENSE +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/WHEEL +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/entry_points.txt +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/top_level.txt +0 -0
not1mm/plugins/cq_wpx_cw.py
CHANGED
@@ -241,7 +241,16 @@ def adif(self):
|
|
241
241
|
gen_adif(self, cabrillo_name, "CQ-WPX-CW")
|
242
242
|
|
243
243
|
|
244
|
-
def
|
244
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
245
|
+
""""""
|
246
|
+
print(
|
247
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
248
|
+
end=ending,
|
249
|
+
file=file_descriptor,
|
250
|
+
)
|
251
|
+
|
252
|
+
|
253
|
+
def cabrillo(self, file_encoding):
|
245
254
|
"""Generates Cabrillo file. Maybe."""
|
246
255
|
# https://www.cqwpx.com/cabrillo.htm
|
247
256
|
logger.debug("******Cabrillo*****")
|
@@ -258,133 +267,150 @@ def cabrillo(self):
|
|
258
267
|
log = self.database.fetch_all_contacts_asc()
|
259
268
|
try:
|
260
269
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
261
|
-
|
262
|
-
|
270
|
+
output_cabrillo_line(
|
271
|
+
"START-OF-LOG: 3.0",
|
272
|
+
"\r\n",
|
273
|
+
file_descriptor,
|
274
|
+
file_encoding,
|
275
|
+
)
|
276
|
+
output_cabrillo_line(
|
263
277
|
f"CREATED-BY: Not1MM v{__version__}",
|
264
|
-
|
265
|
-
|
278
|
+
"\r\n",
|
279
|
+
file_descriptor,
|
280
|
+
file_encoding,
|
266
281
|
)
|
267
|
-
|
282
|
+
output_cabrillo_line(
|
268
283
|
f"CONTEST: {cabrillo_name}",
|
269
|
-
|
270
|
-
|
284
|
+
"\r\n",
|
285
|
+
file_descriptor,
|
286
|
+
file_encoding,
|
271
287
|
)
|
272
288
|
if self.station.get("Club", ""):
|
273
|
-
|
289
|
+
output_cabrillo_line(
|
274
290
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
275
|
-
|
276
|
-
|
291
|
+
"\r\n",
|
292
|
+
file_descriptor,
|
293
|
+
file_encoding,
|
277
294
|
)
|
278
|
-
|
295
|
+
output_cabrillo_line(
|
279
296
|
f"CALLSIGN: {self.station.get('Call','')}",
|
280
|
-
|
281
|
-
|
297
|
+
"\r\n",
|
298
|
+
file_descriptor,
|
299
|
+
file_encoding,
|
282
300
|
)
|
283
|
-
|
301
|
+
output_cabrillo_line(
|
284
302
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
285
|
-
|
286
|
-
|
303
|
+
"\r\n",
|
304
|
+
file_descriptor,
|
305
|
+
file_encoding,
|
287
306
|
)
|
288
|
-
|
289
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
290
|
-
# end="\r\n",
|
291
|
-
# file=file_descriptor,
|
292
|
-
# )
|
293
|
-
print(
|
307
|
+
output_cabrillo_line(
|
294
308
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
295
|
-
|
296
|
-
|
309
|
+
"\r\n",
|
310
|
+
file_descriptor,
|
311
|
+
file_encoding,
|
297
312
|
)
|
298
|
-
|
313
|
+
output_cabrillo_line(
|
299
314
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
300
|
-
|
301
|
-
|
315
|
+
"\r\n",
|
316
|
+
file_descriptor,
|
317
|
+
file_encoding,
|
302
318
|
)
|
303
|
-
|
319
|
+
output_cabrillo_line(
|
304
320
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
305
|
-
|
306
|
-
|
321
|
+
"\r\n",
|
322
|
+
file_descriptor,
|
323
|
+
file_encoding,
|
307
324
|
)
|
308
|
-
|
325
|
+
output_cabrillo_line(
|
309
326
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
310
|
-
|
311
|
-
|
327
|
+
"\r\n",
|
328
|
+
file_descriptor,
|
329
|
+
file_encoding,
|
312
330
|
)
|
313
|
-
|
331
|
+
output_cabrillo_line(
|
314
332
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
315
|
-
|
316
|
-
|
333
|
+
"\r\n",
|
334
|
+
file_descriptor,
|
335
|
+
file_encoding,
|
317
336
|
)
|
318
337
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
319
|
-
|
338
|
+
output_cabrillo_line(
|
320
339
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
321
|
-
|
322
|
-
|
340
|
+
"\r\n",
|
341
|
+
file_descriptor,
|
342
|
+
file_encoding,
|
323
343
|
)
|
324
|
-
|
344
|
+
output_cabrillo_line(
|
325
345
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
326
|
-
|
327
|
-
|
346
|
+
"\r\n",
|
347
|
+
file_descriptor,
|
348
|
+
file_encoding,
|
328
349
|
)
|
329
|
-
|
330
|
-
# f"CATEGORY: {None}",
|
331
|
-
# end="\r\n",
|
332
|
-
# file=file_descriptor,
|
333
|
-
# )
|
334
|
-
print(
|
350
|
+
output_cabrillo_line(
|
335
351
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
336
|
-
|
337
|
-
|
352
|
+
"\r\n",
|
353
|
+
file_descriptor,
|
354
|
+
file_encoding,
|
338
355
|
)
|
339
356
|
|
340
|
-
|
357
|
+
output_cabrillo_line(
|
341
358
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
342
|
-
|
343
|
-
|
359
|
+
"\r\n",
|
360
|
+
file_descriptor,
|
361
|
+
file_encoding,
|
344
362
|
)
|
345
363
|
ops = f"@{self.station.get('Call','')}"
|
346
364
|
list_of_ops = self.database.get_ops()
|
347
365
|
for op in list_of_ops:
|
348
366
|
ops += f", {op.get('Operator', '')}"
|
349
|
-
|
367
|
+
output_cabrillo_line(
|
350
368
|
f"OPERATORS: {ops}",
|
351
|
-
|
352
|
-
|
369
|
+
"\r\n",
|
370
|
+
file_descriptor,
|
371
|
+
file_encoding,
|
353
372
|
)
|
354
|
-
|
373
|
+
output_cabrillo_line(
|
355
374
|
f"NAME: {self.station.get('Name', '')}",
|
356
|
-
|
357
|
-
|
375
|
+
"\r\n",
|
376
|
+
file_descriptor,
|
377
|
+
file_encoding,
|
358
378
|
)
|
359
|
-
|
379
|
+
output_cabrillo_line(
|
360
380
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
361
|
-
|
362
|
-
|
381
|
+
"\r\n",
|
382
|
+
file_descriptor,
|
383
|
+
file_encoding,
|
363
384
|
)
|
364
|
-
|
385
|
+
output_cabrillo_line(
|
365
386
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
366
|
-
|
367
|
-
|
387
|
+
"\r\n",
|
388
|
+
file_descriptor,
|
389
|
+
file_encoding,
|
368
390
|
)
|
369
|
-
|
391
|
+
output_cabrillo_line(
|
370
392
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
371
|
-
|
372
|
-
|
393
|
+
"\r\n",
|
394
|
+
file_descriptor,
|
395
|
+
file_encoding,
|
373
396
|
)
|
374
|
-
|
397
|
+
output_cabrillo_line(
|
375
398
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
376
|
-
|
377
|
-
|
399
|
+
"\r\n",
|
400
|
+
file_descriptor,
|
401
|
+
file_encoding,
|
378
402
|
)
|
379
|
-
|
403
|
+
output_cabrillo_line(
|
380
404
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
381
|
-
|
382
|
-
|
405
|
+
"\r\n",
|
406
|
+
file_descriptor,
|
407
|
+
file_encoding,
|
383
408
|
)
|
384
|
-
|
409
|
+
output_cabrillo_line(
|
385
410
|
f"EMAIL: {self.station.get('Email', '')}",
|
386
|
-
|
387
|
-
|
411
|
+
"\r\n",
|
412
|
+
file_descriptor,
|
413
|
+
file_encoding,
|
388
414
|
)
|
389
415
|
for contact in log:
|
390
416
|
the_date_and_time = contact.get("TS", "")
|
@@ -395,7 +421,7 @@ def cabrillo(self):
|
|
395
421
|
|
396
422
|
loggeddate = the_date_and_time[:10]
|
397
423
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
398
|
-
|
424
|
+
output_cabrillo_line(
|
399
425
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
400
426
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
401
427
|
f"{str(contact.get('SNT', '')).ljust(3)} "
|
@@ -403,10 +429,11 @@ def cabrillo(self):
|
|
403
429
|
f"{contact.get('Call', '').ljust(13)} "
|
404
430
|
f"{str(contact.get('RCV', '')).ljust(3)} "
|
405
431
|
f"{str(contact.get('NR', '')).ljust(6)}",
|
406
|
-
|
407
|
-
|
432
|
+
"\r\n",
|
433
|
+
file_descriptor,
|
434
|
+
file_encoding,
|
408
435
|
)
|
409
|
-
|
436
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
410
437
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
411
438
|
except IOError as exception:
|
412
439
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
not1mm/plugins/cq_wpx_rtty.py
CHANGED
@@ -240,7 +240,16 @@ def adif(self):
|
|
240
240
|
gen_adif(self, cabrillo_name, "CQ-WPX-RTTY")
|
241
241
|
|
242
242
|
|
243
|
-
def
|
243
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
244
|
+
""""""
|
245
|
+
print(
|
246
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
247
|
+
end=ending,
|
248
|
+
file=file_descriptor,
|
249
|
+
)
|
250
|
+
|
251
|
+
|
252
|
+
def cabrillo(self, file_encoding):
|
244
253
|
"""Generates Cabrillo file. Maybe."""
|
245
254
|
# https://www.cqwpx.com/cabrillo.htm
|
246
255
|
logger.debug("******Cabrillo*****")
|
@@ -257,133 +266,150 @@ def cabrillo(self):
|
|
257
266
|
log = self.database.fetch_all_contacts_asc()
|
258
267
|
try:
|
259
268
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
260
|
-
|
261
|
-
|
269
|
+
output_cabrillo_line(
|
270
|
+
"START-OF-LOG: 3.0",
|
271
|
+
"\r\n",
|
272
|
+
file_descriptor,
|
273
|
+
file_encoding,
|
274
|
+
)
|
275
|
+
output_cabrillo_line(
|
262
276
|
f"CREATED-BY: Not1MM v{__version__}",
|
263
|
-
|
264
|
-
|
277
|
+
"\r\n",
|
278
|
+
file_descriptor,
|
279
|
+
file_encoding,
|
265
280
|
)
|
266
|
-
|
281
|
+
output_cabrillo_line(
|
267
282
|
f"CONTEST: {cabrillo_name}",
|
268
|
-
|
269
|
-
|
283
|
+
"\r\n",
|
284
|
+
file_descriptor,
|
285
|
+
file_encoding,
|
270
286
|
)
|
271
287
|
if self.station.get("Club", ""):
|
272
|
-
|
288
|
+
output_cabrillo_line(
|
273
289
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
274
|
-
|
275
|
-
|
290
|
+
"\r\n",
|
291
|
+
file_descriptor,
|
292
|
+
file_encoding,
|
276
293
|
)
|
277
|
-
|
294
|
+
output_cabrillo_line(
|
278
295
|
f"CALLSIGN: {self.station.get('Call','')}",
|
279
|
-
|
280
|
-
|
296
|
+
"\r\n",
|
297
|
+
file_descriptor,
|
298
|
+
file_encoding,
|
281
299
|
)
|
282
|
-
|
300
|
+
output_cabrillo_line(
|
283
301
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
284
|
-
|
285
|
-
|
302
|
+
"\r\n",
|
303
|
+
file_descriptor,
|
304
|
+
file_encoding,
|
286
305
|
)
|
287
|
-
|
288
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
289
|
-
# end="\r\n",
|
290
|
-
# file=file_descriptor,
|
291
|
-
# )
|
292
|
-
print(
|
306
|
+
output_cabrillo_line(
|
293
307
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
294
|
-
|
295
|
-
|
308
|
+
"\r\n",
|
309
|
+
file_descriptor,
|
310
|
+
file_encoding,
|
296
311
|
)
|
297
|
-
|
312
|
+
output_cabrillo_line(
|
298
313
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
299
|
-
|
300
|
-
|
314
|
+
"\r\n",
|
315
|
+
file_descriptor,
|
316
|
+
file_encoding,
|
301
317
|
)
|
302
|
-
|
318
|
+
output_cabrillo_line(
|
303
319
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
304
|
-
|
305
|
-
|
320
|
+
"\r\n",
|
321
|
+
file_descriptor,
|
322
|
+
file_encoding,
|
306
323
|
)
|
307
|
-
|
324
|
+
output_cabrillo_line(
|
308
325
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
309
|
-
|
310
|
-
|
326
|
+
"\r\n",
|
327
|
+
file_descriptor,
|
328
|
+
file_encoding,
|
311
329
|
)
|
312
|
-
|
330
|
+
output_cabrillo_line(
|
313
331
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
314
|
-
|
315
|
-
|
332
|
+
"\r\n",
|
333
|
+
file_descriptor,
|
334
|
+
file_encoding,
|
316
335
|
)
|
317
336
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
318
|
-
|
337
|
+
output_cabrillo_line(
|
319
338
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
320
|
-
|
321
|
-
|
339
|
+
"\r\n",
|
340
|
+
file_descriptor,
|
341
|
+
file_encoding,
|
322
342
|
)
|
323
|
-
|
343
|
+
output_cabrillo_line(
|
324
344
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
325
|
-
|
326
|
-
|
345
|
+
"\r\n",
|
346
|
+
file_descriptor,
|
347
|
+
file_encoding,
|
327
348
|
)
|
328
|
-
|
329
|
-
# f"CATEGORY: {None}",
|
330
|
-
# end="\r\n",
|
331
|
-
# file=file_descriptor,
|
332
|
-
# )
|
333
|
-
print(
|
349
|
+
output_cabrillo_line(
|
334
350
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
335
|
-
|
336
|
-
|
351
|
+
"\r\n",
|
352
|
+
file_descriptor,
|
353
|
+
file_encoding,
|
337
354
|
)
|
338
355
|
|
339
|
-
|
356
|
+
output_cabrillo_line(
|
340
357
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
341
|
-
|
342
|
-
|
358
|
+
"\r\n",
|
359
|
+
file_descriptor,
|
360
|
+
file_encoding,
|
343
361
|
)
|
344
362
|
ops = f"@{self.station.get('Call','')}"
|
345
363
|
list_of_ops = self.database.get_ops()
|
346
364
|
for op in list_of_ops:
|
347
365
|
ops += f", {op.get('Operator', '')}"
|
348
|
-
|
366
|
+
output_cabrillo_line(
|
349
367
|
f"OPERATORS: {ops}",
|
350
|
-
|
351
|
-
|
368
|
+
"\r\n",
|
369
|
+
file_descriptor,
|
370
|
+
file_encoding,
|
352
371
|
)
|
353
|
-
|
372
|
+
output_cabrillo_line(
|
354
373
|
f"NAME: {self.station.get('Name', '')}",
|
355
|
-
|
356
|
-
|
374
|
+
"\r\n",
|
375
|
+
file_descriptor,
|
376
|
+
file_encoding,
|
357
377
|
)
|
358
|
-
|
378
|
+
output_cabrillo_line(
|
359
379
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
360
|
-
|
361
|
-
|
380
|
+
"\r\n",
|
381
|
+
file_descriptor,
|
382
|
+
file_encoding,
|
362
383
|
)
|
363
|
-
|
384
|
+
output_cabrillo_line(
|
364
385
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
365
|
-
|
366
|
-
|
386
|
+
"\r\n",
|
387
|
+
file_descriptor,
|
388
|
+
file_encoding,
|
367
389
|
)
|
368
|
-
|
390
|
+
output_cabrillo_line(
|
369
391
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
370
|
-
|
371
|
-
|
392
|
+
"\r\n",
|
393
|
+
file_descriptor,
|
394
|
+
file_encoding,
|
372
395
|
)
|
373
|
-
|
396
|
+
output_cabrillo_line(
|
374
397
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
375
|
-
|
376
|
-
|
398
|
+
"\r\n",
|
399
|
+
file_descriptor,
|
400
|
+
file_encoding,
|
377
401
|
)
|
378
|
-
|
402
|
+
output_cabrillo_line(
|
379
403
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
380
|
-
|
381
|
-
|
404
|
+
"\r\n",
|
405
|
+
file_descriptor,
|
406
|
+
file_encoding,
|
382
407
|
)
|
383
|
-
|
408
|
+
output_cabrillo_line(
|
384
409
|
f"EMAIL: {self.station.get('Email', '')}",
|
385
|
-
|
386
|
-
|
410
|
+
"\r\n",
|
411
|
+
file_descriptor,
|
412
|
+
file_encoding,
|
387
413
|
)
|
388
414
|
for contact in log:
|
389
415
|
the_date_and_time = contact.get("TS", "")
|
@@ -394,7 +420,7 @@ def cabrillo(self):
|
|
394
420
|
|
395
421
|
loggeddate = the_date_and_time[:10]
|
396
422
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
397
|
-
|
423
|
+
output_cabrillo_line(
|
398
424
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
399
425
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
400
426
|
f"{str(contact.get('SNT', '')).ljust(3)} "
|
@@ -402,10 +428,11 @@ def cabrillo(self):
|
|
402
428
|
f"{contact.get('Call', '').ljust(13)} "
|
403
429
|
f"{str(contact.get('RCV', '')).ljust(3)} "
|
404
430
|
f"{str(contact.get('NR', '')).ljust(6)}",
|
405
|
-
|
406
|
-
|
431
|
+
"\r\n",
|
432
|
+
file_descriptor,
|
433
|
+
file_encoding,
|
407
434
|
)
|
408
|
-
|
435
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
409
436
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
410
437
|
except IOError as exception:
|
411
438
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|