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