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_dx_ssb.py
CHANGED
@@ -194,7 +194,16 @@ def adif(self):
|
|
194
194
|
gen_adif(self, cabrillo_name, "ARRL-DX-SSB")
|
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)
|
not1mm/plugins/arrl_field_day.py
CHANGED
@@ -148,7 +148,16 @@ def adif(self):
|
|
148
148
|
gen_adif(self, cabrillo_name, "ARRL-FIELD-DAY")
|
149
149
|
|
150
150
|
|
151
|
-
def
|
151
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
152
|
+
""""""
|
153
|
+
print(
|
154
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
155
|
+
end=ending,
|
156
|
+
file=file_descriptor,
|
157
|
+
)
|
158
|
+
|
159
|
+
|
160
|
+
def cabrillo(self, file_encoding):
|
152
161
|
"""Generates Cabrillo file. Maybe."""
|
153
162
|
# https://www.cqwpx.com/cabrillo.htm
|
154
163
|
logger.debug("******Cabrillo*****")
|
@@ -165,133 +174,150 @@ def cabrillo(self):
|
|
165
174
|
log = self.database.fetch_all_contacts_asc()
|
166
175
|
try:
|
167
176
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
168
|
-
|
169
|
-
|
177
|
+
output_cabrillo_line(
|
178
|
+
"START-OF-LOG: 3.0",
|
179
|
+
"\r\n",
|
180
|
+
file_descriptor,
|
181
|
+
file_encoding,
|
182
|
+
)
|
183
|
+
output_cabrillo_line(
|
170
184
|
f"CREATED-BY: Not1MM v{__version__}",
|
171
|
-
|
172
|
-
|
185
|
+
"\r\n",
|
186
|
+
file_descriptor,
|
187
|
+
file_encoding,
|
173
188
|
)
|
174
|
-
|
189
|
+
output_cabrillo_line(
|
175
190
|
f"CONTEST: {cabrillo_name}",
|
176
|
-
|
177
|
-
|
191
|
+
"\r\n",
|
192
|
+
file_descriptor,
|
193
|
+
file_encoding,
|
178
194
|
)
|
179
195
|
if self.station.get("Club", ""):
|
180
|
-
|
196
|
+
output_cabrillo_line(
|
181
197
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
182
|
-
|
183
|
-
|
198
|
+
"\r\n",
|
199
|
+
file_descriptor,
|
200
|
+
file_encoding,
|
184
201
|
)
|
185
|
-
|
202
|
+
output_cabrillo_line(
|
186
203
|
f"CALLSIGN: {self.station.get('Call','')}",
|
187
|
-
|
188
|
-
|
204
|
+
"\r\n",
|
205
|
+
file_descriptor,
|
206
|
+
file_encoding,
|
189
207
|
)
|
190
|
-
|
208
|
+
output_cabrillo_line(
|
191
209
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
192
|
-
|
193
|
-
|
210
|
+
"\r\n",
|
211
|
+
file_descriptor,
|
212
|
+
file_encoding,
|
194
213
|
)
|
195
|
-
|
196
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
197
|
-
# end="\r\n",
|
198
|
-
# file=file_descriptor,
|
199
|
-
# )
|
200
|
-
print(
|
214
|
+
output_cabrillo_line(
|
201
215
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
202
|
-
|
203
|
-
|
216
|
+
"\r\n",
|
217
|
+
file_descriptor,
|
218
|
+
file_encoding,
|
204
219
|
)
|
205
|
-
|
220
|
+
output_cabrillo_line(
|
206
221
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
207
|
-
|
208
|
-
|
222
|
+
"\r\n",
|
223
|
+
file_descriptor,
|
224
|
+
file_encoding,
|
209
225
|
)
|
210
|
-
|
226
|
+
output_cabrillo_line(
|
211
227
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
212
|
-
|
213
|
-
|
228
|
+
"\r\n",
|
229
|
+
file_descriptor,
|
230
|
+
file_encoding,
|
214
231
|
)
|
215
|
-
|
232
|
+
output_cabrillo_line(
|
216
233
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
217
|
-
|
218
|
-
|
234
|
+
"\r\n",
|
235
|
+
file_descriptor,
|
236
|
+
file_encoding,
|
219
237
|
)
|
220
|
-
|
238
|
+
output_cabrillo_line(
|
221
239
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
222
|
-
|
223
|
-
|
240
|
+
"\r\n",
|
241
|
+
file_descriptor,
|
242
|
+
file_encoding,
|
224
243
|
)
|
225
244
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
226
|
-
|
245
|
+
output_cabrillo_line(
|
227
246
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
228
|
-
|
229
|
-
|
247
|
+
"\r\n",
|
248
|
+
file_descriptor,
|
249
|
+
file_encoding,
|
230
250
|
)
|
231
|
-
|
251
|
+
output_cabrillo_line(
|
232
252
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
233
|
-
|
234
|
-
|
253
|
+
"\r\n",
|
254
|
+
file_descriptor,
|
255
|
+
file_encoding,
|
235
256
|
)
|
236
|
-
|
237
|
-
# f"CATEGORY: {None}",
|
238
|
-
# end="\r\n",
|
239
|
-
# file=file_descriptor,
|
240
|
-
# )
|
241
|
-
print(
|
257
|
+
output_cabrillo_line(
|
242
258
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
243
|
-
|
244
|
-
|
259
|
+
"\r\n",
|
260
|
+
file_descriptor,
|
261
|
+
file_encoding,
|
245
262
|
)
|
246
263
|
|
247
|
-
|
264
|
+
output_cabrillo_line(
|
248
265
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
249
|
-
|
250
|
-
|
266
|
+
"\r\n",
|
267
|
+
file_descriptor,
|
268
|
+
file_encoding,
|
251
269
|
)
|
252
270
|
ops = f"@{self.station.get('Call','')}"
|
253
271
|
list_of_ops = self.database.get_ops()
|
254
272
|
for op in list_of_ops:
|
255
273
|
ops += f", {op.get('Operator', '')}"
|
256
|
-
|
274
|
+
output_cabrillo_line(
|
257
275
|
f"OPERATORS: {ops}",
|
258
|
-
|
259
|
-
|
276
|
+
"\r\n",
|
277
|
+
file_descriptor,
|
278
|
+
file_encoding,
|
260
279
|
)
|
261
|
-
|
280
|
+
output_cabrillo_line(
|
262
281
|
f"NAME: {self.station.get('Name', '')}",
|
263
|
-
|
264
|
-
|
282
|
+
"\r\n",
|
283
|
+
file_descriptor,
|
284
|
+
file_encoding,
|
265
285
|
)
|
266
|
-
|
286
|
+
output_cabrillo_line(
|
267
287
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
268
|
-
|
269
|
-
|
288
|
+
"\r\n",
|
289
|
+
file_descriptor,
|
290
|
+
file_encoding,
|
270
291
|
)
|
271
|
-
|
292
|
+
output_cabrillo_line(
|
272
293
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
273
|
-
|
274
|
-
|
294
|
+
"\r\n",
|
295
|
+
file_descriptor,
|
296
|
+
file_encoding,
|
275
297
|
)
|
276
|
-
|
298
|
+
output_cabrillo_line(
|
277
299
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
278
|
-
|
279
|
-
|
300
|
+
"\r\n",
|
301
|
+
file_descriptor,
|
302
|
+
file_encoding,
|
280
303
|
)
|
281
|
-
|
304
|
+
output_cabrillo_line(
|
282
305
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
283
|
-
|
284
|
-
|
306
|
+
"\r\n",
|
307
|
+
file_descriptor,
|
308
|
+
file_encoding,
|
285
309
|
)
|
286
|
-
|
310
|
+
output_cabrillo_line(
|
287
311
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
288
|
-
|
289
|
-
|
312
|
+
"\r\n",
|
313
|
+
file_descriptor,
|
314
|
+
file_encoding,
|
290
315
|
)
|
291
|
-
|
316
|
+
output_cabrillo_line(
|
292
317
|
f"EMAIL: {self.station.get('Email', '')}",
|
293
|
-
|
294
|
-
|
318
|
+
"\r\n",
|
319
|
+
file_descriptor,
|
320
|
+
file_encoding,
|
295
321
|
)
|
296
322
|
for contact in log:
|
297
323
|
the_date_and_time = contact.get("TS", "")
|
@@ -304,17 +330,18 @@ def cabrillo(self):
|
|
304
330
|
|
305
331
|
loggeddate = the_date_and_time[:10]
|
306
332
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
307
|
-
|
333
|
+
output_cabrillo_line(
|
308
334
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
309
335
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
310
336
|
f"{self.contest_settings.get('SentExchange', '').ljust(9).upper()}"
|
311
337
|
f"{contact.get('Call', '').ljust(13)} "
|
312
338
|
f"{str(contact.get('Exchange1', '')).ljust(3)} "
|
313
339
|
f"{str(contact.get('Sect', '')).ljust(6)}",
|
314
|
-
|
315
|
-
|
340
|
+
"\r\n",
|
341
|
+
file_descriptor,
|
342
|
+
file_encoding,
|
316
343
|
)
|
317
|
-
|
344
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
318
345
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
319
346
|
except IOError as exception:
|
320
347
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|