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/cwt.py
CHANGED
@@ -199,7 +199,16 @@ def adif(self):
|
|
199
199
|
gen_adif(self, cabrillo_name, "CWOPS-CWT")
|
200
200
|
|
201
201
|
|
202
|
-
def
|
202
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
203
|
+
""""""
|
204
|
+
print(
|
205
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
206
|
+
end=ending,
|
207
|
+
file=file_descriptor,
|
208
|
+
)
|
209
|
+
|
210
|
+
|
211
|
+
def cabrillo(self, file_encoding):
|
203
212
|
"""Generates Cabrillo file. Maybe."""
|
204
213
|
# https://www.cqwpx.com/cabrillo.htm
|
205
214
|
logger.debug("******Cabrillo*****")
|
@@ -216,133 +225,150 @@ def cabrillo(self):
|
|
216
225
|
log = self.database.fetch_all_contacts_asc()
|
217
226
|
try:
|
218
227
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
219
|
-
|
220
|
-
|
228
|
+
output_cabrillo_line(
|
229
|
+
"START-OF-LOG: 3.0",
|
230
|
+
"\r\n",
|
231
|
+
file_descriptor,
|
232
|
+
file_encoding,
|
233
|
+
)
|
234
|
+
output_cabrillo_line(
|
221
235
|
f"CREATED-BY: Not1MM v{__version__}",
|
222
|
-
|
223
|
-
|
236
|
+
"\r\n",
|
237
|
+
file_descriptor,
|
238
|
+
file_encoding,
|
224
239
|
)
|
225
|
-
|
240
|
+
output_cabrillo_line(
|
226
241
|
f"CONTEST: {cabrillo_name}",
|
227
|
-
|
228
|
-
|
242
|
+
"\r\n",
|
243
|
+
file_descriptor,
|
244
|
+
file_encoding,
|
229
245
|
)
|
230
246
|
if self.station.get("Club", ""):
|
231
|
-
|
247
|
+
output_cabrillo_line(
|
232
248
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
233
|
-
|
234
|
-
|
249
|
+
"\r\n",
|
250
|
+
file_descriptor,
|
251
|
+
file_encoding,
|
235
252
|
)
|
236
|
-
|
253
|
+
output_cabrillo_line(
|
237
254
|
f"CALLSIGN: {self.station.get('Call','')}",
|
238
|
-
|
239
|
-
|
255
|
+
"\r\n",
|
256
|
+
file_descriptor,
|
257
|
+
file_encoding,
|
240
258
|
)
|
241
|
-
|
259
|
+
output_cabrillo_line(
|
242
260
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
243
|
-
|
244
|
-
|
261
|
+
"\r\n",
|
262
|
+
file_descriptor,
|
263
|
+
file_encoding,
|
245
264
|
)
|
246
|
-
|
247
|
-
# f"ARRL-SECTION: {self.pref.get('section', '').upper()}",
|
248
|
-
# end="\r\n",
|
249
|
-
# file=file_descriptor,
|
250
|
-
# )
|
251
|
-
print(
|
265
|
+
output_cabrillo_line(
|
252
266
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
253
|
-
|
254
|
-
|
267
|
+
"\r\n",
|
268
|
+
file_descriptor,
|
269
|
+
file_encoding,
|
255
270
|
)
|
256
|
-
|
271
|
+
output_cabrillo_line(
|
257
272
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
258
|
-
|
259
|
-
|
273
|
+
"\r\n",
|
274
|
+
file_descriptor,
|
275
|
+
file_encoding,
|
260
276
|
)
|
261
|
-
|
277
|
+
output_cabrillo_line(
|
262
278
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
263
|
-
|
264
|
-
|
279
|
+
"\r\n",
|
280
|
+
file_descriptor,
|
281
|
+
file_encoding,
|
265
282
|
)
|
266
|
-
|
283
|
+
output_cabrillo_line(
|
267
284
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
268
|
-
|
269
|
-
|
285
|
+
"\r\n",
|
286
|
+
file_descriptor,
|
287
|
+
file_encoding,
|
270
288
|
)
|
271
|
-
|
289
|
+
output_cabrillo_line(
|
272
290
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
273
|
-
|
274
|
-
|
291
|
+
"\r\n",
|
292
|
+
file_descriptor,
|
293
|
+
file_encoding,
|
275
294
|
)
|
276
295
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
277
|
-
|
296
|
+
output_cabrillo_line(
|
278
297
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
279
|
-
|
280
|
-
|
298
|
+
"\r\n",
|
299
|
+
file_descriptor,
|
300
|
+
file_encoding,
|
281
301
|
)
|
282
|
-
|
302
|
+
output_cabrillo_line(
|
283
303
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
284
|
-
|
285
|
-
|
304
|
+
"\r\n",
|
305
|
+
file_descriptor,
|
306
|
+
file_encoding,
|
286
307
|
)
|
287
|
-
|
288
|
-
# f"CATEGORY: {None}",
|
289
|
-
# end="\r\n",
|
290
|
-
# file=file_descriptor,
|
291
|
-
# )
|
292
|
-
print(
|
308
|
+
output_cabrillo_line(
|
293
309
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
294
|
-
|
295
|
-
|
310
|
+
"\r\n",
|
311
|
+
file_descriptor,
|
312
|
+
file_encoding,
|
296
313
|
)
|
297
314
|
|
298
|
-
|
315
|
+
output_cabrillo_line(
|
299
316
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
300
|
-
|
301
|
-
|
317
|
+
"\r\n",
|
318
|
+
file_descriptor,
|
319
|
+
file_encoding,
|
302
320
|
)
|
303
321
|
ops = f"@{self.station.get('Call','')}"
|
304
322
|
list_of_ops = self.database.get_ops()
|
305
323
|
for op in list_of_ops:
|
306
324
|
ops += f", {op.get('Operator', '')}"
|
307
|
-
|
325
|
+
output_cabrillo_line(
|
308
326
|
f"OPERATORS: {ops}",
|
309
|
-
|
310
|
-
|
327
|
+
"\r\n",
|
328
|
+
file_descriptor,
|
329
|
+
file_encoding,
|
311
330
|
)
|
312
|
-
|
331
|
+
output_cabrillo_line(
|
313
332
|
f"NAME: {self.station.get('Name', '')}",
|
314
|
-
|
315
|
-
|
333
|
+
"\r\n",
|
334
|
+
file_descriptor,
|
335
|
+
file_encoding,
|
316
336
|
)
|
317
|
-
|
337
|
+
output_cabrillo_line(
|
318
338
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
319
|
-
|
320
|
-
|
339
|
+
"\r\n",
|
340
|
+
file_descriptor,
|
341
|
+
file_encoding,
|
321
342
|
)
|
322
|
-
|
343
|
+
output_cabrillo_line(
|
323
344
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
324
|
-
|
325
|
-
|
345
|
+
"\r\n",
|
346
|
+
file_descriptor,
|
347
|
+
file_encoding,
|
326
348
|
)
|
327
|
-
|
349
|
+
output_cabrillo_line(
|
328
350
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
329
|
-
|
330
|
-
|
351
|
+
"\r\n",
|
352
|
+
file_descriptor,
|
353
|
+
file_encoding,
|
331
354
|
)
|
332
|
-
|
355
|
+
output_cabrillo_line(
|
333
356
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
334
|
-
|
335
|
-
|
357
|
+
"\r\n",
|
358
|
+
file_descriptor,
|
359
|
+
file_encoding,
|
336
360
|
)
|
337
|
-
|
361
|
+
output_cabrillo_line(
|
338
362
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
339
|
-
|
340
|
-
|
363
|
+
"\r\n",
|
364
|
+
file_descriptor,
|
365
|
+
file_encoding,
|
341
366
|
)
|
342
|
-
|
367
|
+
output_cabrillo_line(
|
343
368
|
f"EMAIL: {self.station.get('Email', '')}",
|
344
|
-
|
345
|
-
|
369
|
+
"\r\n",
|
370
|
+
file_descriptor,
|
371
|
+
file_encoding,
|
346
372
|
)
|
347
373
|
for contact in log:
|
348
374
|
the_date_and_time = contact.get("TS", "")
|
@@ -353,7 +379,7 @@ def cabrillo(self):
|
|
353
379
|
|
354
380
|
loggeddate = the_date_and_time[:10]
|
355
381
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
356
|
-
|
382
|
+
output_cabrillo_line(
|
357
383
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
358
384
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
359
385
|
f"{str(contact.get('SNT', '')).ljust(3)} "
|
@@ -361,10 +387,11 @@ def cabrillo(self):
|
|
361
387
|
f"{contact.get('Call', '').ljust(13)} "
|
362
388
|
f"{str(contact.get('RCV', '')).ljust(3)} "
|
363
389
|
f"{str(contact.get('NR', '')).ljust(6)}",
|
364
|
-
|
365
|
-
|
390
|
+
"\r\n",
|
391
|
+
file_descriptor,
|
392
|
+
file_encoding,
|
366
393
|
)
|
367
|
-
|
394
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
368
395
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
369
396
|
except IOError as exception:
|
370
397
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
not1mm/plugins/helvetia.py
CHANGED
@@ -324,7 +324,16 @@ def adif(self):
|
|
324
324
|
gen_adif(self, cabrillo_name, "HELVETIA")
|
325
325
|
|
326
326
|
|
327
|
-
def
|
327
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
328
|
+
""""""
|
329
|
+
print(
|
330
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
331
|
+
end=ending,
|
332
|
+
file=file_descriptor,
|
333
|
+
)
|
334
|
+
|
335
|
+
|
336
|
+
def cabrillo(self, file_encoding):
|
328
337
|
"""Generates Cabrillo file. Maybe."""
|
329
338
|
# https://www.cqwpx.com/cabrillo.htm
|
330
339
|
logger.debug("******Cabrillo*****")
|
@@ -341,133 +350,150 @@ def cabrillo(self):
|
|
341
350
|
log = self.database.fetch_all_contacts_asc()
|
342
351
|
try:
|
343
352
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
344
|
-
|
345
|
-
|
353
|
+
output_cabrillo_line(
|
354
|
+
"START-OF-LOG: 3.0",
|
355
|
+
"\r\n",
|
356
|
+
file_descriptor,
|
357
|
+
file_encoding,
|
358
|
+
)
|
359
|
+
output_cabrillo_line(
|
346
360
|
f"CREATED-BY: Not1MM v{__version__}",
|
347
|
-
|
348
|
-
|
361
|
+
"\r\n",
|
362
|
+
file_descriptor,
|
363
|
+
file_encoding,
|
349
364
|
)
|
350
|
-
|
365
|
+
output_cabrillo_line(
|
351
366
|
f"CONTEST: {cabrillo_name}",
|
352
|
-
|
353
|
-
|
367
|
+
"\r\n",
|
368
|
+
file_descriptor,
|
369
|
+
file_encoding,
|
354
370
|
)
|
355
371
|
if self.station.get("Club", ""):
|
356
|
-
|
372
|
+
output_cabrillo_line(
|
357
373
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
358
|
-
|
359
|
-
|
374
|
+
"\r\n",
|
375
|
+
file_descriptor,
|
376
|
+
file_encoding,
|
360
377
|
)
|
361
|
-
|
378
|
+
output_cabrillo_line(
|
362
379
|
f"CALLSIGN: {self.station.get('Call','')}",
|
363
|
-
|
364
|
-
|
380
|
+
"\r\n",
|
381
|
+
file_descriptor,
|
382
|
+
file_encoding,
|
365
383
|
)
|
366
|
-
|
384
|
+
output_cabrillo_line(
|
367
385
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
368
|
-
|
369
|
-
|
386
|
+
"\r\n",
|
387
|
+
file_descriptor,
|
388
|
+
file_encoding,
|
370
389
|
)
|
371
|
-
|
372
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
373
|
-
# end="\r\n",
|
374
|
-
# file=file_descriptor,
|
375
|
-
# )
|
376
|
-
print(
|
390
|
+
output_cabrillo_line(
|
377
391
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
378
|
-
|
379
|
-
|
392
|
+
"\r\n",
|
393
|
+
file_descriptor,
|
394
|
+
file_encoding,
|
380
395
|
)
|
381
|
-
|
396
|
+
output_cabrillo_line(
|
382
397
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
383
|
-
|
384
|
-
|
398
|
+
"\r\n",
|
399
|
+
file_descriptor,
|
400
|
+
file_encoding,
|
385
401
|
)
|
386
|
-
|
402
|
+
output_cabrillo_line(
|
387
403
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
388
|
-
|
389
|
-
|
404
|
+
"\r\n",
|
405
|
+
file_descriptor,
|
406
|
+
file_encoding,
|
390
407
|
)
|
391
|
-
|
408
|
+
output_cabrillo_line(
|
392
409
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
393
|
-
|
394
|
-
|
410
|
+
"\r\n",
|
411
|
+
file_descriptor,
|
412
|
+
file_encoding,
|
395
413
|
)
|
396
|
-
|
414
|
+
output_cabrillo_line(
|
397
415
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
398
|
-
|
399
|
-
|
416
|
+
"\r\n",
|
417
|
+
file_descriptor,
|
418
|
+
file_encoding,
|
400
419
|
)
|
401
420
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
402
|
-
|
421
|
+
output_cabrillo_line(
|
403
422
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
404
|
-
|
405
|
-
|
423
|
+
"\r\n",
|
424
|
+
file_descriptor,
|
425
|
+
file_encoding,
|
406
426
|
)
|
407
|
-
|
427
|
+
output_cabrillo_line(
|
408
428
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
409
|
-
|
410
|
-
|
429
|
+
"\r\n",
|
430
|
+
file_descriptor,
|
431
|
+
file_encoding,
|
411
432
|
)
|
412
|
-
|
413
|
-
# f"CATEGORY: {None}",
|
414
|
-
# end="\r\n",
|
415
|
-
# file=file_descriptor,
|
416
|
-
# )
|
417
|
-
print(
|
433
|
+
output_cabrillo_line(
|
418
434
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
419
|
-
|
420
|
-
|
435
|
+
"\r\n",
|
436
|
+
file_descriptor,
|
437
|
+
file_encoding,
|
421
438
|
)
|
422
439
|
|
423
|
-
|
440
|
+
output_cabrillo_line(
|
424
441
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
425
|
-
|
426
|
-
|
442
|
+
"\r\n",
|
443
|
+
file_descriptor,
|
444
|
+
file_encoding,
|
427
445
|
)
|
428
446
|
ops = f"@{self.station.get('Call','')}"
|
429
447
|
list_of_ops = self.database.get_ops()
|
430
448
|
for op in list_of_ops:
|
431
449
|
ops += f", {op.get('Operator', '')}"
|
432
|
-
|
450
|
+
output_cabrillo_line(
|
433
451
|
f"OPERATORS: {ops}",
|
434
|
-
|
435
|
-
|
452
|
+
"\r\n",
|
453
|
+
file_descriptor,
|
454
|
+
file_encoding,
|
436
455
|
)
|
437
|
-
|
456
|
+
output_cabrillo_line(
|
438
457
|
f"NAME: {self.station.get('Name', '')}",
|
439
|
-
|
440
|
-
|
458
|
+
"\r\n",
|
459
|
+
file_descriptor,
|
460
|
+
file_encoding,
|
441
461
|
)
|
442
|
-
|
462
|
+
output_cabrillo_line(
|
443
463
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
444
|
-
|
445
|
-
|
464
|
+
"\r\n",
|
465
|
+
file_descriptor,
|
466
|
+
file_encoding,
|
446
467
|
)
|
447
|
-
|
468
|
+
output_cabrillo_line(
|
448
469
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
449
|
-
|
450
|
-
|
470
|
+
"\r\n",
|
471
|
+
file_descriptor,
|
472
|
+
file_encoding,
|
451
473
|
)
|
452
|
-
|
474
|
+
output_cabrillo_line(
|
453
475
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
454
|
-
|
455
|
-
|
476
|
+
"\r\n",
|
477
|
+
file_descriptor,
|
478
|
+
file_encoding,
|
456
479
|
)
|
457
|
-
|
480
|
+
output_cabrillo_line(
|
458
481
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
459
|
-
|
460
|
-
|
482
|
+
"\r\n",
|
483
|
+
file_descriptor,
|
484
|
+
file_encoding,
|
461
485
|
)
|
462
|
-
|
486
|
+
output_cabrillo_line(
|
463
487
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
464
|
-
|
465
|
-
|
488
|
+
"\r\n",
|
489
|
+
file_descriptor,
|
490
|
+
file_encoding,
|
466
491
|
)
|
467
|
-
|
492
|
+
output_cabrillo_line(
|
468
493
|
f"EMAIL: {self.station.get('Email', '')}",
|
469
|
-
|
470
|
-
|
494
|
+
"\r\n",
|
495
|
+
file_descriptor,
|
496
|
+
file_encoding,
|
471
497
|
)
|
472
498
|
for contact in log:
|
473
499
|
the_date_and_time = contact.get("TS", "")
|
@@ -478,7 +504,7 @@ def cabrillo(self):
|
|
478
504
|
|
479
505
|
loggeddate = the_date_and_time[:10]
|
480
506
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
481
|
-
|
507
|
+
output_cabrillo_line(
|
482
508
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
483
509
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
484
510
|
f"{str(contact.get('SNT', '')).ljust(3)} "
|
@@ -486,10 +512,11 @@ def cabrillo(self):
|
|
486
512
|
f"{contact.get('Call', '').ljust(13)} "
|
487
513
|
f"{str(contact.get('RCV', '')).ljust(3)} "
|
488
514
|
f"{str(contact.get('NR', '')).ljust(6)}",
|
489
|
-
|
490
|
-
|
515
|
+
"\r\n",
|
516
|
+
file_descriptor,
|
517
|
+
file_encoding,
|
491
518
|
)
|
492
|
-
|
519
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
493
520
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
494
521
|
except IOError as exception:
|
495
522
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|