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