not1mm 24.11.15__py3-none-any.whl → 24.11.17__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 CHANGED
@@ -3274,6 +3274,11 @@ class MainWindow(QtWidgets.QMainWindow):
3274
3274
  self.dupe_indicator.show()
3275
3275
  else:
3276
3276
  self.dupe_indicator.hide()
3277
+ if self.contest:
3278
+ if self.use_call_history and hasattr(
3279
+ self.contest, "populate_history_info_line"
3280
+ ):
3281
+ self.contest.populate_history_info_line(self)
3277
3282
 
3278
3283
  def change_freq(self, stripped_text: str) -> None:
3279
3284
  """
@@ -3428,7 +3433,7 @@ class MainWindow(QtWidgets.QMainWindow):
3428
3433
  self.contact["CountryPrefix"] = primary_pfx
3429
3434
  self.contact["ZN"] = int(cq)
3430
3435
  if self.contest:
3431
- if self.contest.name == "IARU HF":
3436
+ if self.contest.name in ("IARU HF", "LZ DX"):
3432
3437
  self.contact["ZN"] = int(itu)
3433
3438
  self.contact["Continent"] = continent
3434
3439
  self.dx_entity.setText(
@@ -347,6 +347,11 @@
347
347
  <string>K1USN SST</string>
348
348
  </property>
349
349
  </item>
350
+ <item>
351
+ <property name="text">
352
+ <string>LZ-DX</string>
353
+ </property>
354
+ </item>
350
355
  <item>
351
356
  <property name="text">
352
357
  <string>NAQP CW</string>
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.11.15"
3
+ __version__ = "24.11.17"
@@ -134,6 +134,16 @@ def prefill(self):
134
134
  field.setText(serial_nr)
135
135
 
136
136
 
137
+ def populate_history_info_line(self):
138
+ result = self.database.fetch_call_history(self.callsign.text())
139
+ if result:
140
+ self.history_info.setText(
141
+ f"{result.get('Call', '')}, {result.get('CK', '')}, {result.get('Sect', '')}, {result.get('UserText','...')}"
142
+ )
143
+ else:
144
+ self.history_info.setText("")
145
+
146
+
137
147
  def check_call_history(self):
138
148
  """"""
139
149
  result = self.database.fetch_call_history(self.callsign.text())
@@ -537,6 +537,16 @@ def ft8_handler(the_packet: dict):
537
537
  ALTEREGO.save_contact()
538
538
 
539
539
 
540
+ def populate_history_info_line(self):
541
+ result = self.database.fetch_call_history(self.callsign.text())
542
+ if result:
543
+ self.history_info.setText(
544
+ f"{result.get('Call', '')}, {result.get('Loc1', '')}, {result.get('UserText','...')}"
545
+ )
546
+ else:
547
+ self.history_info.setText("")
548
+
549
+
540
550
  def check_call_history(self):
541
551
  """"""
542
552
  result = self.database.fetch_call_history(self.callsign.text())
@@ -505,6 +505,16 @@ def ft8_handler(the_packet: dict):
505
505
  ALTEREGO.save_contact()
506
506
 
507
507
 
508
+ def populate_history_info_line(self):
509
+ result = self.database.fetch_call_history(self.callsign.text())
510
+ if result:
511
+ self.history_info.setText(
512
+ f"{result.get('Call', '')}, {result.get('Loc1', '')}, {result.get('UserText','...')}"
513
+ )
514
+ else:
515
+ self.history_info.setText("")
516
+
517
+
508
518
  def check_call_history(self):
509
519
  """"""
510
520
  result = self.database.fetch_call_history(self.callsign.text())
@@ -505,6 +505,16 @@ def ft8_handler(the_packet: dict):
505
505
  ALTEREGO.save_contact()
506
506
 
507
507
 
508
+ def populate_history_info_line(self):
509
+ result = self.database.fetch_call_history(self.callsign.text())
510
+ if result:
511
+ self.history_info.setText(
512
+ f"{result.get('Call', '')}, {result.get('Loc1', '')}, {result.get('UserText','...')}"
513
+ )
514
+ else:
515
+ self.history_info.setText("")
516
+
517
+
508
518
  def check_call_history(self):
509
519
  """"""
510
520
  result = self.database.fetch_call_history(self.callsign.text())
@@ -450,6 +450,16 @@ def recalculate_mults(self):
450
450
  trigger_update(self)
451
451
 
452
452
 
453
+ def populate_history_info_line(self):
454
+ result = self.database.fetch_call_history(self.callsign.text())
455
+ if result:
456
+ self.history_info.setText(
457
+ f"{result.get('Call', '')}, {result.get('UserText','...')}"
458
+ )
459
+ else:
460
+ self.history_info.setText("")
461
+
462
+
453
463
  def check_call_history(self):
454
464
  """"""
455
465
  result = self.database.fetch_call_history(self.callsign.text())
@@ -450,6 +450,16 @@ def recalculate_mults(self):
450
450
  trigger_update(self)
451
451
 
452
452
 
453
+ def populate_history_info_line(self):
454
+ result = self.database.fetch_call_history(self.callsign.text())
455
+ if result:
456
+ self.history_info.setText(
457
+ f"{result.get('Call', '')}, {result.get('UserText','...')}"
458
+ )
459
+ else:
460
+ self.history_info.setText("")
461
+
462
+
453
463
  def check_call_history(self):
454
464
  """"""
455
465
  result = self.database.fetch_call_history(self.callsign.text())
@@ -520,6 +520,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
520
520
  self.process_function_key(button)
521
521
 
522
522
 
523
+ def populate_history_info_line(self):
524
+ result = self.database.fetch_call_history(self.callsign.text())
525
+ if result:
526
+ self.history_info.setText(
527
+ f"{result.get('Call', '')}, {result.get('CQZone', '')}, {result.get('UserText','...')}"
528
+ )
529
+ else:
530
+ self.history_info.setText("")
531
+
532
+
523
533
  def check_call_history(self):
524
534
  """"""
525
535
  result = self.database.fetch_call_history(self.callsign.text())
@@ -639,6 +639,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
639
639
  self.fldigi_util.send_string(sendstring)
640
640
 
641
641
 
642
+ def populate_history_info_line(self):
643
+ result = self.database.fetch_call_history(self.callsign.text())
644
+ if result:
645
+ self.history_info.setText(
646
+ f"{result.get('Call', '')}, {result.get('CQZone', '')}, {result.get('State', '')}, {result.get('UserText','...')}"
647
+ )
648
+ else:
649
+ self.history_info.setText("")
650
+
651
+
642
652
  def check_call_history(self):
643
653
  """"""
644
654
  result = self.database.fetch_call_history(self.callsign.text())
@@ -508,6 +508,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
508
508
  self.process_function_key(button)
509
509
 
510
510
 
511
+ def populate_history_info_line(self):
512
+ result = self.database.fetch_call_history(self.callsign.text())
513
+ if result:
514
+ self.history_info.setText(
515
+ f"{result.get('Call', '')}, {result.get('CQZone', '')}, {result.get('UserText','...')}"
516
+ )
517
+ else:
518
+ self.history_info.setText("")
519
+
520
+
511
521
  def check_call_history(self):
512
522
  """"""
513
523
  result = self.database.fetch_call_history(self.callsign.text())
not1mm/plugins/cwt.py CHANGED
@@ -514,6 +514,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
514
514
  self.process_function_key(button)
515
515
 
516
516
 
517
+ def populate_history_info_line(self):
518
+ result = self.database.fetch_call_history(self.callsign.text())
519
+ if result:
520
+ self.history_info.setText(
521
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
522
+ )
523
+ else:
524
+ self.history_info.setText("")
525
+
526
+
517
527
  def check_call_history(self):
518
528
  """"""
519
529
  result = self.database.fetch_call_history(self.callsign.text())
@@ -524,6 +524,16 @@ def cabrillo(self, file_encoding):
524
524
  return
525
525
 
526
526
 
527
+ def populate_history_info_line(self):
528
+ result = self.database.fetch_call_history(self.callsign.text())
529
+ if result:
530
+ self.history_info.setText(
531
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
532
+ )
533
+ else:
534
+ self.history_info.setText("")
535
+
536
+
527
537
  def check_call_history(self):
528
538
  """"""
529
539
  result = self.database.fetch_call_history(self.callsign.text())
@@ -493,6 +493,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
493
493
  self.process_function_key(button)
494
494
 
495
495
 
496
+ def populate_history_info_line(self):
497
+ result = self.database.fetch_call_history(self.callsign.text())
498
+ if result:
499
+ self.history_info.setText(
500
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
501
+ )
502
+ else:
503
+ self.history_info.setText("")
504
+
505
+
496
506
  def check_call_history(self):
497
507
  """"""
498
508
  result = self.database.fetch_call_history(self.callsign.text())
@@ -0,0 +1,634 @@
1
+ """
2
+ @dg9vh
3
+ LZ-DX
4
+ -------------------------------------------------
5
+ Status: Active
6
+ Geographic Focus: Bulgaria
7
+ Participation: Worldwide
8
+ Mode: CW, SSB
9
+ Bands: 160, 80, 40, 20, 15, 10m
10
+ Classes: Single Op (CW/SSB) High
11
+ Single Op Mixed (QRP/Low/High)
12
+ Multi-Op (CW/SSB/Mixed) High
13
+ SWL
14
+ Max operating hours: 18 with a maximum of two rest periods of any length
15
+ Max power: HP: >100 watts
16
+ LP: 100 watts
17
+ QRP: 5 watts (CW/Digital) or 10 watts (SSB)
18
+ Exchange: LZ: RS(T) + 2-letter district
19
+ non-HB: RS(T) + ITU zone
20
+ Work stations: Once per band per mode
21
+
22
+ Scoring:
23
+ Contact with a station in Bulgaria: 10 points
24
+ Contact with a station within the same continent: 1 point
25
+ Contact with a station outside the operator’s continent: 3 points
26
+
27
+ Multipliers: District and DXCC country (including Bulgaria) per band: 1 point
28
+
29
+ Score Calculation: Total score = total QSO points x total mults
30
+ Mail logs to: lzdxc@bfra.bg
31
+ Find rules at: https://lzdx.bfra.bg/rulesen.html
32
+ Cabrillo name: LZ-DX
33
+ """
34
+
35
+ import datetime
36
+ import logging
37
+ import platform
38
+
39
+ from pathlib import Path
40
+
41
+ from PyQt6 import QtWidgets
42
+
43
+ from not1mm.lib.plugin_common import gen_adif, get_points
44
+
45
+ from not1mm.lib.version import __version__
46
+
47
+ logger = logging.getLogger(__name__)
48
+
49
+ EXCHANGE_HINT = "District or ITU-Zone"
50
+
51
+ name = "LZ DX"
52
+ cabrillo_name = "LZ-DX"
53
+ mode = "BOTH" # CW SSB BOTH RTTY
54
+
55
+ columns = [
56
+ "YYYY-MM-DD HH:MM:SS",
57
+ "Call",
58
+ "Freq",
59
+ "Mode",
60
+ "Snt",
61
+ "Rcv",
62
+ "SentNr",
63
+ "RcvNr",
64
+ "M1",
65
+ "M2",
66
+ "PTS",
67
+ ]
68
+
69
+ advance_on_space = [True, True, True, True, True]
70
+
71
+ # 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
72
+ dupe_type = 3
73
+
74
+ cantons = [
75
+ "BU",
76
+ "BL",
77
+ "VN",
78
+ "VD",
79
+ "VR",
80
+ "GA",
81
+ "DO",
82
+ "KA",
83
+ "KD",
84
+ "LV",
85
+ "MN",
86
+ "PA",
87
+ "PK",
88
+ "PL",
89
+ "PD",
90
+ "RZ",
91
+ "RS",
92
+ "SS",
93
+ "SL",
94
+ "SM",
95
+ "SF",
96
+ "SO",
97
+ "SZ",
98
+ "TA",
99
+ "HA",
100
+ "SN",
101
+ "YA",
102
+ ]
103
+
104
+
105
+ def init_contest(self):
106
+ """setup plugin"""
107
+ set_tab_next(self)
108
+ set_tab_prev(self)
109
+ interface(self)
110
+ self.next_field = self.other_2
111
+
112
+
113
+ def interface(self):
114
+ """Setup user interface"""
115
+ self.field1.show()
116
+ self.field2.show()
117
+ self.field3.hide()
118
+ self.field4.show()
119
+ label = self.field3.findChild(QtWidgets.QLabel)
120
+ label.setText("Sent")
121
+ self.field3.setAccessibleName("Sent")
122
+ label = self.field4.findChild(QtWidgets.QLabel)
123
+ label.setText("District/ITU")
124
+ self.field4.setAccessibleName("District or ITU")
125
+
126
+
127
+ def reset_label(self):
128
+ """reset label after field cleared"""
129
+
130
+
131
+ def set_tab_next(self):
132
+ """Set TAB Advances"""
133
+ self.tab_next = {
134
+ self.callsign: self.field1.findChild(QtWidgets.QLineEdit),
135
+ self.field1.findChild(QtWidgets.QLineEdit): self.field4.findChild(
136
+ QtWidgets.QLineEdit
137
+ ),
138
+ self.field2.findChild(QtWidgets.QLineEdit): self.field4.findChild(
139
+ QtWidgets.QLineEdit
140
+ ),
141
+ self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
142
+ QtWidgets.QLineEdit
143
+ ),
144
+ self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
145
+ }
146
+
147
+
148
+ def set_tab_prev(self):
149
+ """Set TAB Advances"""
150
+ self.tab_prev = {
151
+ self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
152
+ self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
153
+ self.field2.findChild(QtWidgets.QLineEdit): self.callsign,
154
+ self.field3.findChild(QtWidgets.QLineEdit): self.callsign,
155
+ self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
156
+ QtWidgets.QLineEdit
157
+ ),
158
+ }
159
+
160
+
161
+ def set_contact_vars(self):
162
+ """Contest Specific"""
163
+ self.contact["SNT"] = self.sent.text()
164
+ self.contact["RCV"] = self.receive.text()
165
+ self.contact["SentNr"] = self.other_1.text().upper()
166
+ self.contact["NR"] = self.other_2.text().upper()
167
+
168
+ self.contact["IsMultiplier1"] = 0
169
+ self.contact["IsMultiplier2"] = 0
170
+
171
+ if (
172
+ self.contact.get("CountryPrefix", "") == "LZ"
173
+ and self.contact.get("NR", "").isalpha()
174
+ ):
175
+ canton = self.contact.get("NR", "").upper()
176
+ band = self.contact.get("Band", "")
177
+ query = (
178
+ f"select count(*) as canton_count from dxlog where "
179
+ f"NR = '{canton}' "
180
+ f"and Band = '{band}' "
181
+ f"and ContestNR = {self.pref.get('contest', '1')};"
182
+ )
183
+ result = self.database.exec_sql(query)
184
+ count = int(result.get("canton_count", 0))
185
+ if count == 0:
186
+ self.contact["IsMultiplier1"] = 1
187
+
188
+ if self.contact.get("CountryPrefix", ""):
189
+ dxcc = self.contact.get("CountryPrefix", "")
190
+ band = self.contact.get("Band", "")
191
+ query = (
192
+ f"select count(*) as dxcc_count from dxlog where "
193
+ f"CountryPrefix = '{dxcc}' "
194
+ f"and Band = '{band}' "
195
+ f"and ContestNR = {self.pref.get('contest', '1')};"
196
+ )
197
+ result = self.database.exec_sql(query)
198
+ if not result.get("dxcc_count", ""):
199
+ self.contact["IsMultiplier2"] = 1
200
+
201
+
202
+ def prefill(self):
203
+ """Fill SentNR"""
204
+ field = self.field3.findChild(QtWidgets.QLineEdit)
205
+ sent_sxchange_setting = self.contest_settings.get("SentExchange", "")
206
+ if sent_sxchange_setting.strip() == "#":
207
+ result = self.database.get_serial()
208
+ serial_nr = str(result.get("serial_nr", "1")).zfill(3)
209
+ if serial_nr == "None":
210
+ serial_nr = "001"
211
+ if len(field.text()) == 0:
212
+ field.setText(serial_nr)
213
+ else:
214
+ field.setText(sent_sxchange_setting)
215
+
216
+
217
+ def show_mults(self):
218
+ """Return display string for mults"""
219
+ return int(self.database.fetch_mult_count(1).get("count", 0)) + int(
220
+ self.database.fetch_mult_count(2).get("count", 0)
221
+ )
222
+
223
+
224
+ def show_qso(self):
225
+ """Return qso count"""
226
+ result = self.database.fetch_qso_count()
227
+ if result:
228
+ return int(result.get("qsos", 0))
229
+ return 0
230
+
231
+
232
+ def adif(self):
233
+ """Call the generate ADIF function"""
234
+ gen_adif(self, cabrillo_name, "LZ-DX")
235
+
236
+
237
+ def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
238
+ """"""
239
+ print(
240
+ line_to_output.encode(file_encoding, errors="ignore").decode(),
241
+ end=ending,
242
+ file=file_descriptor,
243
+ )
244
+
245
+
246
+ def cabrillo(self, file_encoding):
247
+ """Generates Cabrillo file. Maybe."""
248
+ # https://www.cqwpx.com/cabrillo.htm
249
+ logger.debug("******Cabrillo*****")
250
+ logger.debug("Station: %s", f"{self.station}")
251
+ logger.debug("Contest: %s", f"{self.contest_settings}")
252
+ now = datetime.datetime.now()
253
+ date_time = now.strftime("%Y-%m-%d_%H-%M-%S")
254
+ filename = (
255
+ str(Path.home())
256
+ + "/"
257
+ + f"{self.station.get('Call', '').upper()}_{cabrillo_name}_{date_time}.log"
258
+ )
259
+ logger.debug("%s", filename)
260
+ log = self.database.fetch_all_contacts_asc()
261
+ try:
262
+ with open(filename, "w", encoding=file_encoding) as file_descriptor:
263
+ output_cabrillo_line(
264
+ "START-OF-LOG: 3.0",
265
+ "\r\n",
266
+ file_descriptor,
267
+ file_encoding,
268
+ )
269
+ output_cabrillo_line(
270
+ f"CREATED-BY: Not1MM v{__version__}",
271
+ "\r\n",
272
+ file_descriptor,
273
+ file_encoding,
274
+ )
275
+ output_cabrillo_line(
276
+ f"CONTEST: {cabrillo_name}",
277
+ "\r\n",
278
+ file_descriptor,
279
+ file_encoding,
280
+ )
281
+ if self.station.get("Club", ""):
282
+ output_cabrillo_line(
283
+ f"CLUB: {self.station.get('Club', '').upper()}",
284
+ "\r\n",
285
+ file_descriptor,
286
+ file_encoding,
287
+ )
288
+ output_cabrillo_line(
289
+ f"CALLSIGN: {self.station.get('Call','')}",
290
+ "\r\n",
291
+ file_descriptor,
292
+ file_encoding,
293
+ )
294
+ output_cabrillo_line(
295
+ f"LOCATION: {self.station.get('ARRLSection', '')}",
296
+ "\r\n",
297
+ file_descriptor,
298
+ file_encoding,
299
+ )
300
+ output_cabrillo_line(
301
+ f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
302
+ "\r\n",
303
+ file_descriptor,
304
+ file_encoding,
305
+ )
306
+ output_cabrillo_line(
307
+ f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
308
+ "\r\n",
309
+ file_descriptor,
310
+ file_encoding,
311
+ )
312
+ output_cabrillo_line(
313
+ f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
314
+ "\r\n",
315
+ file_descriptor,
316
+ file_encoding,
317
+ )
318
+ output_cabrillo_line(
319
+ f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
320
+ "\r\n",
321
+ file_descriptor,
322
+ file_encoding,
323
+ )
324
+ output_cabrillo_line(
325
+ f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
326
+ "\r\n",
327
+ file_descriptor,
328
+ file_encoding,
329
+ )
330
+ if self.contest_settings.get("OverlayCategory", "") != "N/A":
331
+ output_cabrillo_line(
332
+ f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
333
+ "\r\n",
334
+ file_descriptor,
335
+ file_encoding,
336
+ )
337
+ output_cabrillo_line(
338
+ f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
339
+ "\r\n",
340
+ file_descriptor,
341
+ file_encoding,
342
+ )
343
+ output_cabrillo_line(
344
+ f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
345
+ "\r\n",
346
+ file_descriptor,
347
+ file_encoding,
348
+ )
349
+
350
+ output_cabrillo_line(
351
+ f"CLAIMED-SCORE: {calc_score(self)}",
352
+ "\r\n",
353
+ file_descriptor,
354
+ file_encoding,
355
+ )
356
+ ops = f"@{self.station.get('Call','')}"
357
+ list_of_ops = self.database.get_ops()
358
+ for op in list_of_ops:
359
+ ops += f", {op.get('Operator', '')}"
360
+ output_cabrillo_line(
361
+ f"OPERATORS: {ops}",
362
+ "\r\n",
363
+ file_descriptor,
364
+ file_encoding,
365
+ )
366
+ output_cabrillo_line(
367
+ f"NAME: {self.station.get('Name', '')}",
368
+ "\r\n",
369
+ file_descriptor,
370
+ file_encoding,
371
+ )
372
+ output_cabrillo_line(
373
+ f"ADDRESS: {self.station.get('Street1', '')}",
374
+ "\r\n",
375
+ file_descriptor,
376
+ file_encoding,
377
+ )
378
+ output_cabrillo_line(
379
+ f"ADDRESS-CITY: {self.station.get('City', '')}",
380
+ "\r\n",
381
+ file_descriptor,
382
+ file_encoding,
383
+ )
384
+ output_cabrillo_line(
385
+ f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
386
+ "\r\n",
387
+ file_descriptor,
388
+ file_encoding,
389
+ )
390
+ output_cabrillo_line(
391
+ f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
392
+ "\r\n",
393
+ file_descriptor,
394
+ file_encoding,
395
+ )
396
+ output_cabrillo_line(
397
+ f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
398
+ "\r\n",
399
+ file_descriptor,
400
+ file_encoding,
401
+ )
402
+ output_cabrillo_line(
403
+ f"EMAIL: {self.station.get('Email', '')}",
404
+ "\r\n",
405
+ file_descriptor,
406
+ file_encoding,
407
+ )
408
+ for contact in log:
409
+ the_date_and_time = contact.get("TS", "")
410
+ themode = contact.get("Mode", "")
411
+ if themode == "LSB" or themode == "USB":
412
+ themode = "PH"
413
+ frequency = str(int(contact.get("Freq", "0"))).rjust(5)
414
+
415
+ loggeddate = the_date_and_time[:10]
416
+ loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
417
+ output_cabrillo_line(
418
+ f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
419
+ f"{contact.get('StationPrefix', '').ljust(13)} "
420
+ f"{str(contact.get('SNT', '')).ljust(3)} "
421
+ f"{str(contact.get('SentNr', '')).ljust(6)} "
422
+ f"{contact.get('Call', '').ljust(13)} "
423
+ f"{str(contact.get('RCV', '')).ljust(3)} "
424
+ f"{str(contact.get('NR', '')).ljust(6)}",
425
+ "\r\n",
426
+ file_descriptor,
427
+ file_encoding,
428
+ )
429
+ output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
430
+ self.show_message_box(f"Cabrillo saved to: {filename}")
431
+ except IOError as exception:
432
+ logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
433
+ self.show_message_box(f"Error saving Cabrillo: {exception} {filename}")
434
+ return
435
+
436
+
437
+ def check_call_history(self):
438
+ """"""
439
+ result = self.database.fetch_call_history(self.callsign.text())
440
+ if result:
441
+ self.history_info.setText(f"{result.get('UserText','')}")
442
+ if self.other_2.text() == "":
443
+ self.other_2.setText(f"{result.get('Exch1', '')}")
444
+
445
+
446
+ def predupe(self):
447
+ """called after callsign entered"""
448
+
449
+
450
+ def points(self):
451
+ """
452
+ Scoring:
453
+ Contact with a station within the same continent: 1 point
454
+ Contact with a station outside the operator’s continent: 3 points
455
+ Contact with a station in Switzerland: 10 points
456
+ self.contact["CountryPrefix"]
457
+ self.contact["Continent"]
458
+ """
459
+ result = self.cty_lookup(self.station.get("Call", ""))
460
+ if result:
461
+ for item in result.items():
462
+ my_continent = item[1].get("continent", "")
463
+ result = self.cty_lookup(self.contact.get("Call", ""))
464
+ if result:
465
+ for item in result.items():
466
+ their_country = item[1].get("entity", "")
467
+ their_continent = item[1].get("continent", "")
468
+
469
+ if their_country == "Bulgaria":
470
+ return 10
471
+
472
+ if my_continent != their_continent:
473
+ return 3
474
+
475
+ return 1
476
+ # Something wrong
477
+ return 0
478
+
479
+
480
+ def calc_score(self):
481
+ """Return calculated score"""
482
+ result = self.database.fetch_points()
483
+ if result is not None:
484
+ score = result.get("Points", "0")
485
+ if score is None:
486
+ score = "0"
487
+ contest_points = int(score)
488
+ mults = show_mults(self)
489
+ return contest_points * mults
490
+ return 0
491
+
492
+
493
+ def recalculate_mults(self):
494
+ """Recalculates multipliers after change in logged qso."""
495
+
496
+ all_contacts = self.database.fetch_all_contacts_asc()
497
+ for contact in all_contacts:
498
+
499
+ contact["IsMultiplier1"] = 0
500
+ contact["IsMultiplier2"] = 0
501
+
502
+ time_stamp = contact.get("TS", "")
503
+ canton = contact.get("NR", "")
504
+ dxcc = contact.get("CountryPrefix", "")
505
+ band = contact.get("Band", "")
506
+ if dxcc == "LZ" and canton.isalpha():
507
+ query = (
508
+ f"select count(*) as canton_count from dxlog where TS < '{time_stamp}' "
509
+ f"and NR = '{canton.upper()}' "
510
+ f"and Band = '{band}' "
511
+ f"and ContestNR = {self.pref.get('contest', '1')};"
512
+ )
513
+ result = self.database.exec_sql(query)
514
+ count = int(result.get("canton_count", 0))
515
+ if count == 0:
516
+ contact["IsMultiplier1"] = 1
517
+
518
+ if dxcc:
519
+ query = (
520
+ f"select count(*) as dxcc_count from dxlog where TS < '{time_stamp}' "
521
+ f"and CountryPrefix = '{dxcc}' "
522
+ f"and Band = '{band}' "
523
+ f"and ContestNR = {self.pref.get('contest', '1')};"
524
+ )
525
+ result = self.database.exec_sql(query)
526
+ if not result.get("dxcc_count", ""):
527
+ contact["IsMultiplier2"] = 1
528
+
529
+ self.database.change_contact(contact)
530
+ cmd = {}
531
+ cmd["cmd"] = "UPDATELOG"
532
+ cmd["station"] = platform.node()
533
+ # self.multicast_interface.send_as_json(cmd)
534
+
535
+
536
+ def populate_history_info_line(self):
537
+ result = self.database.fetch_call_history(self.callsign.text())
538
+ if result:
539
+ self.history_info.setText(
540
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
541
+ )
542
+ else:
543
+ self.history_info.setText("")
544
+
545
+
546
+ def process_esm(self, new_focused_widget=None, with_enter=False):
547
+ """ESM State Machine"""
548
+
549
+ # self.pref["run_state"]
550
+
551
+ # -----===== Assigned F-Keys =====-----
552
+ # self.esm_dict["CQ"]
553
+ # self.esm_dict["EXCH"]
554
+ # self.esm_dict["QRZ"]
555
+ # self.esm_dict["AGN"]
556
+ # self.esm_dict["HISCALL"]
557
+ # self.esm_dict["MYCALL"]
558
+ # self.esm_dict["QSOB4"]
559
+
560
+ # ----==== text fields ====----
561
+ # self.callsign
562
+ # self.sent
563
+ # self.receive
564
+ # self.other_1
565
+ # self.other_2
566
+
567
+ if new_focused_widget is not None:
568
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
569
+
570
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
571
+
572
+ for a_button in [
573
+ self.esm_dict["CQ"],
574
+ self.esm_dict["EXCH"],
575
+ self.esm_dict["QRZ"],
576
+ self.esm_dict["AGN"],
577
+ self.esm_dict["HISCALL"],
578
+ self.esm_dict["MYCALL"],
579
+ self.esm_dict["QSOB4"],
580
+ ]:
581
+ if a_button is not None:
582
+ self.restore_button_color(a_button)
583
+
584
+ buttons_to_send = []
585
+
586
+ if self.pref.get("run_state"):
587
+ if self.current_widget == "callsign":
588
+ if len(self.callsign.text()) < 3:
589
+ self.make_button_green(self.esm_dict["CQ"])
590
+ buttons_to_send.append(self.esm_dict["CQ"])
591
+ elif len(self.callsign.text()) > 2:
592
+ self.make_button_green(self.esm_dict["HISCALL"])
593
+ self.make_button_green(self.esm_dict["EXCH"])
594
+ buttons_to_send.append(self.esm_dict["HISCALL"])
595
+ buttons_to_send.append(self.esm_dict["EXCH"])
596
+
597
+ elif self.current_widget == "other_2":
598
+ if self.other_2.text() == "":
599
+ self.make_button_green(self.esm_dict["AGN"])
600
+ buttons_to_send.append(self.esm_dict["AGN"])
601
+ else:
602
+ self.make_button_green(self.esm_dict["QRZ"])
603
+ buttons_to_send.append(self.esm_dict["QRZ"])
604
+ buttons_to_send.append("LOGIT")
605
+
606
+ if with_enter is True and bool(len(buttons_to_send)):
607
+ for button in buttons_to_send:
608
+ if button:
609
+ if button == "LOGIT":
610
+ self.save_contact()
611
+ continue
612
+ self.process_function_key(button)
613
+ else:
614
+ if self.current_widget == "callsign":
615
+ if len(self.callsign.text()) > 2:
616
+ self.make_button_green(self.esm_dict["MYCALL"])
617
+ buttons_to_send.append(self.esm_dict["MYCALL"])
618
+
619
+ elif self.current_widget == "other_2":
620
+ if self.other_2.text() == "":
621
+ self.make_button_green(self.esm_dict["AGN"])
622
+ buttons_to_send.append(self.esm_dict["AGN"])
623
+ else:
624
+ self.make_button_green(self.esm_dict["EXCH"])
625
+ buttons_to_send.append(self.esm_dict["EXCH"])
626
+ buttons_to_send.append("LOGIT")
627
+
628
+ if with_enter is True and bool(len(buttons_to_send)):
629
+ for button in buttons_to_send:
630
+ if button:
631
+ if button == "LOGIT":
632
+ self.save_contact()
633
+ continue
634
+ self.process_function_key(button)
not1mm/plugins/naqp_cw.py CHANGED
@@ -543,6 +543,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
543
543
  self.process_function_key(button)
544
544
 
545
545
 
546
+ def populate_history_info_line(self):
547
+ result = self.database.fetch_call_history(self.callsign.text())
548
+ if result:
549
+ self.history_info.setText(
550
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('State', '')}, {result.get('UserText','...')}"
551
+ )
552
+ else:
553
+ self.history_info.setText("")
554
+
555
+
546
556
  def check_call_history(self):
547
557
  """"""
548
558
  result = self.database.fetch_call_history(self.callsign.text())
@@ -650,6 +650,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
650
650
  self.fldigi_util.send_string(sendstring)
651
651
 
652
652
 
653
+ def populate_history_info_line(self):
654
+ result = self.database.fetch_call_history(self.callsign.text())
655
+ if result:
656
+ self.history_info.setText(
657
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('State', '')}, {result.get('UserText','...')}"
658
+ )
659
+ else:
660
+ self.history_info.setText("")
661
+
662
+
653
663
  def check_call_history(self):
654
664
  """"""
655
665
  result = self.database.fetch_call_history(self.callsign.text())
@@ -513,6 +513,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
513
513
  self.process_function_key(button)
514
514
 
515
515
 
516
+ def populate_history_info_line(self):
517
+ result = self.database.fetch_call_history(self.callsign.text())
518
+ if result:
519
+ self.history_info.setText(
520
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('State', '')}, {result.get('UserText','...')}"
521
+ )
522
+ else:
523
+ self.history_info.setText("")
524
+
525
+
516
526
  def check_call_history(self):
517
527
  """"""
518
528
  result = self.database.fetch_call_history(self.callsign.text())
not1mm/plugins/raem.py CHANGED
@@ -491,6 +491,16 @@ def recalculate_mults(self):
491
491
  # self.database.change_contact(contact)
492
492
 
493
493
 
494
+ def populate_history_info_line(self):
495
+ result = self.database.fetch_call_history(self.callsign.text())
496
+ if result:
497
+ self.history_info.setText(
498
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('UserText','...')}"
499
+ )
500
+ else:
501
+ self.history_info.setText("")
502
+
503
+
494
504
  def check_call_history(self):
495
505
  """"""
496
506
  result = self.database.fetch_call_history(self.callsign.text())
@@ -366,6 +366,16 @@ def recalculate_mults(self):
366
366
  """Recalculates multipliers after change in logged qso."""
367
367
 
368
368
 
369
+ def populate_history_info_line(self):
370
+ result = self.database.fetch_call_history(self.callsign.text())
371
+ if result:
372
+ self.history_info.setText(
373
+ f"{result.get('Call', '')}, {result.get('Loc1', '')}, {result.get('UserText','...')}"
374
+ )
375
+ else:
376
+ self.history_info.setText("")
377
+
378
+
369
379
  def check_call_history(self):
370
380
  """"""
371
381
  result = self.database.fetch_call_history(self.callsign.text())
@@ -574,6 +574,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
574
574
  self.fldigi_util.send_string(sendstring)
575
575
 
576
576
 
577
+ def populate_history_info_line(self):
578
+ result = self.database.fetch_call_history(self.callsign.text())
579
+ if result:
580
+ self.history_info.setText(
581
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('Sect', '')}, {result.get('UserText','...')}"
582
+ )
583
+ else:
584
+ self.history_info.setText("")
585
+
586
+
577
587
  def check_call_history(self):
578
588
  """"""
579
589
  result = self.database.fetch_call_history(self.callsign.text())
@@ -441,6 +441,16 @@ def process_esm(self, new_focused_widget=None, with_enter=False):
441
441
  self.process_function_key(button)
442
442
 
443
443
 
444
+ def populate_history_info_line(self):
445
+ result = self.database.fetch_call_history(self.callsign.text())
446
+ if result:
447
+ self.history_info.setText(
448
+ f"{result.get('Call', '')}, {result.get('Exch1', '')}, {result.get('Sect', '')}, {result.get('UserText','...')}"
449
+ )
450
+ else:
451
+ self.history_info.setText("")
452
+
453
+
444
454
  def check_call_history(self):
445
455
  """"""
446
456
  result = self.database.fetch_call_history(self.callsign.text())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.15
3
+ Version: 24.11.17
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -236,6 +236,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
236
236
 
237
237
  ## Recent Changes (Polishing the Turd)
238
238
 
239
+ - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
239
240
  - [24-11-15] Made checkwindow font bigger and match a little more contrasted.
240
241
  - [24-11-12] add check for ipv4 address for CAT.
241
242
  - [24-11-10] ReJiggered CAT/flrig interface to hopefull make it more workable.
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=4-LleuZUg7ap_uXRgGPlHF_oATLdikKmGosNBFiEs7w,142026
2
+ not1mm/__main__.py,sha256=PxZOEeA305r1-6JH-nEsD0L3ApeJOo8f9djG3tYmlFk,142248
3
3
  not1mm/bandmap.py,sha256=X6mMHXS1kXBbUPZCaKgiVJ6Dz6DE6LEQqtEXfT3telg,30811
4
4
  not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
@@ -31,7 +31,7 @@ not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N
31
31
  not1mm/data/logwindow.ui,sha256=f7vULj96tHIQuR1nJMyvPHHcmVgzkhv9D1isyojsnFU,1458
32
32
  not1mm/data/logwindowx.ui,sha256=CwpI-h7cI1yqyldH9quKftsdHL5lTyL9ABOcf80nfqc,1632
33
33
  not1mm/data/main.ui,sha256=pI-70TYESe85ENkRH8l1DXnKDOkwYqKXUdMk6KYaN50,63193
34
- not1mm/data/new_contest.ui,sha256=NyeO5TCeKFWghHMC2D5OL96XPmzXF0dlFWCue-3goE8,23530
34
+ not1mm/data/new_contest.ui,sha256=Y1YIflpArpWAzYjfKE0hOruyhO2UYsDAyENif3nwRAo,23632
35
35
  not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
36
36
  not1mm/data/opon.ui,sha256=QDicqAk2lORG2UWsHa6jHlsGn6uzrrI2R4HSAocpPes,2258
37
37
  not1mm/data/pickcontest.ui,sha256=4hPBszCglObThx_eIWtmK9CEcbr7WBjbB1rKZdI-o3I,1707
@@ -114,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=TbFUbftjELFt4QRdsjSHbqnXSngZOlSwlCTClqosDXA,9
114
114
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
115
115
  not1mm/lib/settings.py,sha256=Xt0WE2ro_kUYdugQ0Pe1SQX07MHrJ0jyQqDqAKKqxuU,13564
116
116
  not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
117
- not1mm/lib/version.py,sha256=aRi6m4Au46BpRtaGyKGcmp5nXY8c2Dm0VCEx-MGaCGo,49
117
+ not1mm/lib/version.py,sha256=y8htQUC1rQ50qc5l_eZgL6oDbuN8zG6wC8Y7-mRiN1s,49
118
118
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
119
119
  not1mm/plugins/10_10_fall_cw.py,sha256=gNgTnafjM99cFvZ-6qBfWoOvd5Zj2Ehx6XjJvrHjm40,11872
120
120
  not1mm/plugins/10_10_spring_cw.py,sha256=QME8LyLyTnHsA5sjGG19n_64-0gdgBMRRi9C8LpgQzs,11877
@@ -126,43 +126,44 @@ not1mm/plugins/arrl_dx_cw.py,sha256=zAnVa3spbxjlDXMrV_RvvqyUAaYBZ6IZjxhsfLdc-9Q,
126
126
  not1mm/plugins/arrl_dx_ssb.py,sha256=Xxa9t2mu9IhY71jevvY95CMLXOBHBOGstNFWUwsVQkE,18017
127
127
  not1mm/plugins/arrl_field_day.py,sha256=N68dy5FhPCDYxTIP8PNQh4p5rZDJlHmhQqJyH6Qi4qo,16967
128
128
  not1mm/plugins/arrl_rtty_ru.py,sha256=hKUS4isjdXo3EYxQrsqsDupPp2chW8fpoWj0T1pTgJ4,7994
129
- not1mm/plugins/arrl_ss_cw.py,sha256=JEr3fxpn-R0R70uBdpMpFBH-mdx7Vrt9e6UQuvR0X9I,17572
129
+ not1mm/plugins/arrl_ss_cw.py,sha256=8Dg8bxZoTkZWP0DYy7Lt3f8CHNSksNeE4aCGTAKF0y0,17910
130
130
  not1mm/plugins/arrl_ss_phone.py,sha256=zIZidB3li8n7dxCsqGechkSmxjQM7TBHeLvSv2l5QdY,17246
131
- not1mm/plugins/arrl_vhf_jan.py,sha256=LE1X0G9m6YrgUMB3CV12lxkh1bf9QiRU-gMi51NFtLs,16928
132
- not1mm/plugins/arrl_vhf_jun.py,sha256=RlQLXWASs6mNUhVnvlUp35N5bGYbQGaDJj8UJantSok,16020
133
- not1mm/plugins/arrl_vhf_sep.py,sha256=xIUgHIXMZ0euMCaTr2Ftk3U5yu4cFxP2YOeQvLUnGgE,16020
131
+ not1mm/plugins/arrl_vhf_jan.py,sha256=hKfGtQZJWhOuzqhafg8KgbSFDS7gttBdjuuqFH_7e58,17242
132
+ not1mm/plugins/arrl_vhf_jun.py,sha256=7BevXyO2Ahsy1Sk73Q-YadUcERcij8ksmewnGrXO8dY,16334
133
+ not1mm/plugins/arrl_vhf_sep.py,sha256=yULszFTT8M2FSfJamHNITkCj7CNwxchaMlvoeaxdvgE,16334
134
134
  not1mm/plugins/canada_day.py,sha256=kFwrJ6T9Zz34KmaWL88bj8MDSYNpO2q_KNWLkLLZKlI,15993
135
- not1mm/plugins/cq_160_cw.py,sha256=axx9oFhJ3SgfuMC3nmSId0_xUcldKK1Jxq2Rew7em-M,15779
136
- not1mm/plugins/cq_160_ssb.py,sha256=SE2caAhJ_VdlONEMcamEFebAzybRGX98koW8LaWG0vY,15822
135
+ not1mm/plugins/cq_160_cw.py,sha256=J4jDjXqZJQZFHo4c47fivOqheDq3i300o8FAIy6fr6E,16067
136
+ not1mm/plugins/cq_160_ssb.py,sha256=vwwRlmmN0hcm9qptTQUlxCs9_kMX9-50zNnsgek8ijA,16110
137
137
  not1mm/plugins/cq_wpx_cw.py,sha256=g_d7i1DrQjAeGuof6SoKAr9HkR9ru3EBEKxLSBjNF4o,18508
138
138
  not1mm/plugins/cq_wpx_rtty.py,sha256=t5ZAWAtsjda6rAHJ2N2mfenazhsSo2yzqRGV-TKZEbA,21327
139
139
  not1mm/plugins/cq_wpx_ssb.py,sha256=f7cCyheb7VqkDMrM-wevcOCUXjrIXyBI0p2ynVYnDO0,17158
140
- not1mm/plugins/cq_ww_cw.py,sha256=1sxwrvHGbzErQSXFSWw7wpg6DEKXrjHfE7SK2noCcjE,17700
141
- not1mm/plugins/cq_ww_rtty.py,sha256=DaofxRXnbt095FJ-uZ4B_Wx6P12mdO6c_nQFhpMp0RU,22335
142
- not1mm/plugins/cq_ww_ssb.py,sha256=QKOTw842eF9a4WiNZB-f16YE4zm2mIc0JxmU46URXUk,17299
143
- not1mm/plugins/cwt.py,sha256=duG8CgTWaFCjly7zOmhOJo-sH3amby0OarAjswhz1Cc,17370
140
+ not1mm/plugins/cq_ww_cw.py,sha256=rLd95LgScgdrZibpX2kOlzmjCHWSy7PFqXisYXn4CzA,18016
141
+ not1mm/plugins/cq_ww_rtty.py,sha256=8JV0TsUGXLn0LsEyDJhgb56r2nlcSm4meGURl5WvDs0,22678
142
+ not1mm/plugins/cq_ww_ssb.py,sha256=Io9b40ZgZHmE8JsDe5dYHcuECWEYiT_BDXGxDpqQsjY,17615
143
+ not1mm/plugins/cwt.py,sha256=89MWOQttlRfcur8bt9xl5J79Ks67ctVhv8r62yQRxQo,17711
144
144
  not1mm/plugins/general_logging.py,sha256=IHcgZ1YJEEaxPUn7jyTIUpQAsa1jaHO5zfHvcaqbF34,3494
145
- not1mm/plugins/helvetia.py,sha256=Q-dQgJ5-81jwip0J_JE2XdUtkY1dVlD8bPfVbllwGLU,19925
145
+ not1mm/plugins/helvetia.py,sha256=d8DugnlUYOC_ig3lpJcwrTIV2YJxreePNhtt1Bjcc1Q,20240
146
146
  not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=b3bmpBWpuN6lNvbBvUb8vUYHjeb0JmN4n6mgfug5ITs,14220
147
147
  not1mm/plugins/iaru_fieldday_r1_ssb.py,sha256=FA9XBc137WSO00IY65qFChDK1pOOAOqdnda_lRCZbJ0,14225
148
148
  not1mm/plugins/iaru_hf.py,sha256=Lg1rNWcLKDXR_AAFoMs-velZxNMTO_7kiJeT-j0A2wo,12460
149
149
  not1mm/plugins/icwc_mst.py,sha256=N41Qg1sGAGkjx87uWUE77U-VvJmNXkCR_WfKdKg5nSk,12750
150
150
  not1mm/plugins/jidx_cw.py,sha256=Mw5U25jxXJiHx8YEBXz6VPVVQ7rQb9LREYic6hVaMs0,13043
151
151
  not1mm/plugins/jidx_ph.py,sha256=qhF_NQzx2RiM23CY9qPd4Vg_zFmnzSivvPXv4HpPLBY,12073
152
- not1mm/plugins/k1usn_sst.py,sha256=Z7r8Bz2vsWKbA4MNVoXdfdH3oSOvuftoWY2_X_hDJWc,16681
153
- not1mm/plugins/naqp_cw.py,sha256=mV32k78KE07YlyALW26y-TAITkVwDOn1gEoMrHj-7Qs,18606
154
- not1mm/plugins/naqp_rtty.py,sha256=P70eIvjZHMNTjYcZZ8IOXPXtNzGmLWJdYxwOqnzCThg,22290
155
- not1mm/plugins/naqp_ssb.py,sha256=6DbOUsbKMxDHw8m1OcyqtjVUL3qqZ2A5bqQPjYbbJ6M,17523
152
+ not1mm/plugins/k1usn_sst.py,sha256=sDrZH5ZR9-KwuLO-KNrNC88A74l5pd2DhB0Hu1jTw8o,17022
153
+ not1mm/plugins/lz-dx.py,sha256=Ci8mYfKgom-eK7ZWfWDlaS8btq-IBQh4qsgUdFRGH2c,20137
154
+ not1mm/plugins/naqp_cw.py,sha256=_Dn0bt2RylNOdtr_KuqqmroSGqZn-5XuJgBbkVq01es,18947
155
+ not1mm/plugins/naqp_rtty.py,sha256=IZYrqwfQo5Vjz-xYiDawFDZ9R7d4dG-XZIsvHWYciHI,22631
156
+ not1mm/plugins/naqp_ssb.py,sha256=tu8AmMQdbL-krHPIUdVaDW881mQnWQu5dCmrR0c7sAU,17864
156
157
  not1mm/plugins/phone_weekly_test.py,sha256=q0n8RJ39KF9uzkgTwrRqTlnS1l_xpm86UTsYRtD6Qok,13244
157
- not1mm/plugins/raem.py,sha256=7CSTaMqINB3QVxzqWRZxpxuoXQoCx10J_V49GyXAHWI,19450
158
+ not1mm/plugins/raem.py,sha256=viTF1KRVb0I2GYX1mk8cLuEnAQJSyQq9D5muwVxh2ew,19765
158
159
  not1mm/plugins/ref_cw.py,sha256=bLu1BIHnMfJJAw-pcLDVSi93vTMBY8Io1I4SkJSRX0E,20916
159
160
  not1mm/plugins/ref_ssb.py,sha256=Z6ZqNInyGFwWNSHXrzCDlokMxZ6NQQ2Yi1c8CGfmNWE,20922
160
- not1mm/plugins/stew_perry_topband.py,sha256=DXbJYLJ7JpPotdvax74d2YOX5HaMUc-Fk1XvBXMhl9I,11879
161
- not1mm/plugins/weekly_rtty.py,sha256=OLiLW3Xd-tylSy9onOXCxQwWfijx-O5PAgjHh7_vG1o,19496
162
- not1mm/plugins/winter_field_day.py,sha256=E4Rn7bOpN2LNoRi4_aRDHd_8p5lxn1vG_ubGdzn5zB0,14891
163
- not1mm-24.11.15.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
164
- not1mm-24.11.15.dist-info/METADATA,sha256=QrqvyaHVbCpuvTMKzmAkv-GCu_grLvibO7wVjCgqewk,36244
165
- not1mm-24.11.15.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
166
- not1mm-24.11.15.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
167
- not1mm-24.11.15.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
168
- not1mm-24.11.15.dist-info/RECORD,,
161
+ not1mm/plugins/stew_perry_topband.py,sha256=D6KCyna4SVt6w_huH-nkxGXnOpJKbbi3Dg7J81e_dpw,12193
162
+ not1mm/plugins/weekly_rtty.py,sha256=q8A2UOMQidLoFtd5QxZWHtUPCgms_2dgYocO8d6tf70,19836
163
+ not1mm/plugins/winter_field_day.py,sha256=5SAaFq-1NYMr18Ee-aFZhXsaU-Pzwte1GOJoGCaUwxg,15232
164
+ not1mm-24.11.17.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
165
+ not1mm-24.11.17.dist-info/METADATA,sha256=PpeeGFLV4eVNceP6rgdnLxvpN6MR4juL7bzsR-6K91s,36303
166
+ not1mm-24.11.17.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
167
+ not1mm-24.11.17.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
168
+ not1mm-24.11.17.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
169
+ not1mm-24.11.17.dist-info/RECORD,,