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