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