Skip to content

Commit 68754a8

Browse files
committed
Add support for POTA hunters
POTA references in non-POTA logs are supported by the canonical FLE app. This patch enables that functionality in FLEcli Branch: support-pota-hunters
1 parent c5846fb commit 68754a8

File tree

7 files changed

+115
-10
lines changed

7 files changed

+115
-10
lines changed

fleprocess/adif_write.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ func buildAdif(fullLog []LogLine, adifParams AdifParams) (adifList []string) {
5353
}
5454
adifLine.WriteString(adifElement("RST_SENT", logLine.RSTsent))
5555
adifLine.WriteString(adifElement("RST_RCVD", logLine.RSTrcvd))
56+
if logLine.GridLoc != "" {
57+
adifLine.WriteString(adifElement("GRIDSQUARE", logLine.GridLoc))
58+
}
5659
if logLine.Comment != "" {
5760
adifLine.WriteString(adifElement("COMMENT", logLine.Comment))
5861
}
5962
if logLine.OMname != "" {
6063
adifLine.WriteString(adifElement("NAME", logLine.OMname))
6164
}
62-
if logLine.GridLoc != "" {
63-
adifLine.WriteString(adifElement("GRIDSQUARE", logLine.GridLoc))
64-
}
6565
if logLine.QSLmsg != "" {
6666
adifLine.WriteString(adifElement("QSLMSG", logLine.QSLmsg))
6767
}
@@ -76,11 +76,13 @@ func buildAdif(fullLog []LogLine, adifParams AdifParams) (adifList []string) {
7676
if adifParams.IsPOTA {
7777
adifLine.WriteString(adifElement("MY_SIG", "POTA"))
7878
adifLine.WriteString(adifElement("MY_SIG_INFO", logLine.MyPOTA))
79-
if logLine.POTA != "" {
80-
adifLine.WriteString(adifElement("SIG", "POTA"))
81-
adifLine.WriteString(adifElement("SIG_INFO", logLine.POTA))
82-
}
8379
}
80+
81+
if logLine.POTA != "" {
82+
adifLine.WriteString(adifElement("SIG", "POTA"))
83+
adifLine.WriteString(adifElement("SIG_INFO", logLine.POTA))
84+
}
85+
8486
if adifParams.IsSOTA {
8587
adifLine.WriteString(adifElement("MY_SOTA_REF", logLine.MySOTA))
8688
if logLine.SOTA != "" {

fleprocess/adif_write_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,22 @@ func Test_buildAdif(t *testing.T) {
124124
"<STATION_CALLSIGN:8>ON4KJM/P <CALL:5>ON4LY <QSO_DATE:8>20200524 <TIME_ON:4>1312 <BAND:3>20m <MODE:2>CW <RST_SENT:3>559 <RST_RCVD:3>599 <MY_SIG:4>POTA <MY_SIG_INFO:8>ON-00259 <SIG:4>POTA <SIG_INFO:8>DL-00001 <OPERATOR:6>ON4KJM <MY_GRIDSQUARE:6>JO40eu <MY_LAT:10>15.1234567 <MY_LON:12>-123.1234567 <EOR>",
125125
}
126126

127+
sampleFilledLogPOTAHunter := []LogLine{
128+
{MyCall: "ON4KJM/P", Call: "S57LC", Date: "2020-05-24", MyGrid: "JO40eu", Time: "1310", Band: "20m", Frequency: "14.045", Mode: "CW", RSTsent: "599", RSTrcvd: "599", GridLoc: "JO50", Operator: "ON4KJM", Nickname: "ON-00259-1"},
129+
{MyCall: "ON4KJM/P", Call: "ON4LY", Date: "2020-05-24", MyGrid: "JO40eu", Time: "1312", Band: "20m", Mode: "CW", RSTsent: "559", RSTrcvd: "599", Operator: "ON4KJM", POTA: "DL-00001"},
130+
{MyCall: "ON4KJM/P", Call: "ON4LY", Date: "2020-05-24", MyGrid: "JO40eu", Time: "1312", Band: "20m", Mode: "CW", RSTsent: "559", RSTrcvd: "599", Operator: "ON4KJM", POTA: "DL-00001", MyLat: "15.1234567", MyLon: "-123.1234567"},
131+
}
132+
133+
expectedOutputPOTAHunter := []string{
134+
"ADIF Export for Fast Log Entry by DF3CB",
135+
"<PROGRAMID:3>FLE",
136+
"<ADIF_VER:5>3.1.0",
137+
"<EOH>",
138+
"<STATION_CALLSIGN:8>ON4KJM/P <CALL:5>S57LC <QSO_DATE:8>20200524 <TIME_ON:4>1310 <BAND:3>20m <MODE:2>CW <FREQ:6>14.045 <RST_SENT:3>599 <RST_RCVD:3>599 <GRIDSQUARE:4>JO50 <OPERATOR:6>ON4KJM <MY_GRIDSQUARE:6>JO40eu <APP_EQSL_QTH_NICKNAME:10>ON-00259-1 <EOR>",
139+
"<STATION_CALLSIGN:8>ON4KJM/P <CALL:5>ON4LY <QSO_DATE:8>20200524 <TIME_ON:4>1312 <BAND:3>20m <MODE:2>CW <RST_SENT:3>559 <RST_RCVD:3>599 <SIG:4>POTA <SIG_INFO:8>DL-00001 <OPERATOR:6>ON4KJM <MY_GRIDSQUARE:6>JO40eu <EOR>",
140+
"<STATION_CALLSIGN:8>ON4KJM/P <CALL:5>ON4LY <QSO_DATE:8>20200524 <TIME_ON:4>1312 <BAND:3>20m <MODE:2>CW <RST_SENT:3>559 <RST_RCVD:3>599 <SIG:4>POTA <SIG_INFO:8>DL-00001 <OPERATOR:6>ON4KJM <MY_GRIDSQUARE:6>JO40eu <MY_LAT:10>15.1234567 <MY_LON:12>-123.1234567 <EOR>",
141+
}
142+
127143
type args struct {
128144
fullLog []LogLine
129145
adifParams AdifParams
@@ -172,6 +188,14 @@ func Test_buildAdif(t *testing.T) {
172188
},
173189
expectedOutputPOTA2,
174190
},
191+
{
192+
"Happy case-POTA Hunter",
193+
args{
194+
fullLog: sampleFilledLogPOTAHunter,
195+
adifParams: AdifParams{IsPOTA: false},
196+
},
197+
expectedOutputPOTAHunter,
198+
},
175199
}
176200
for _, tt := range tests {
177201
t.Run(tt.name, func(t *testing.T) {

fleprocess/braketedData.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,5 @@ func getBraketedData(inputLine string, braketType BraketType) (braketedData, cle
5959

6060
braketedData = inputLine[posFirstAdjusted:posLast]
6161
cleanedLine = strings.Replace(inputLine, a+braketedData+b, "", 1)
62-
return braketedData, cleanedLine
62+
return strings.TrimSpace(braketedData), cleanedLine
6363
}

test/bats-scripts/test.bats

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
output=$(test/docker-FLEcli.sh load -i test/data/ON4KJM@ONFF-025920200524.txt)
1818
}
1919

20+
@test "Is the generated ADIF from a POTA hunter equivalent to the canonical one?" {
21+
mkdir -p test/output/temp
22+
output=$(test/docker-FLEcli.sh adif -o -i test/data/sample_pota_hunter.txt test/output/temp/sample_pota_hunter.adif)
23+
diff test/output/temp/sample_pota_hunter.adif test/output/POTA/sample_pota_hunter.adif --strip-trailing-cr
24+
}
25+
2026
@test "Is the generated SOTA csv equivalent to the canonical one?" {
2127
mkdir -p test/output/temp
2228
output=$(test/docker-FLEcli.sh csv -o -i test/FLE-sample/sota_wwff.txt test/output/temp/sota_wwff.csv)
@@ -41,4 +47,4 @@
4147

4248
@test "Processing a big FLE file" {
4349
run test/docker-FLEcli.sh csv -o -i test/data/fle-6-bigFile.txt test/output/temp/fle-6-bigFile.csv
44-
}
50+
}

test/data/sample_pota_hunter.txt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Header
2+
mycall kc3yqi
3+
mygrid FM19je
4+
5+
2024-05-10
6+
20m SSB
7+
0000 14.26 cu2yk 59 57 #HM77DT
8+
2137 14.273 kc0qna pota us-2481 55 55 #EN24pk
9+
10+
20m
11+
12+
2024-06-05 14.317 SSB 0220 kp4pr @Jose #FK68xk
13+
2024-06-05 14.270 SSB 0234 lz2vu @Juli #KN33gs
14+
15+
SSB
16+
17+
# 20m General is >= 14.225 <= 14.347
18+
19+
2024-06-07
20+
0448 14.250 dl5pia 57 59 @Petra < Mother of Pia > #JN48kn
21+
0448 14.250 dl7pia 57 59 @Pia < Daughter of Petra > #JN48kn
22+
23+
40m SSB
24+
25+
7.266 SSB
26+
2024-06-12 0045 kd4ge 57 57 @Darryl #EM93dk
27+
28+
7.216 SSB
29+
2024-06-12 0129 ko4nll 55 55
30+
31+
20m SSB
32+
33+
2024-06-13 0301 14.225 r5aj 59 59 @Valery < Moscow, will upload to youtube > #KO95iu
34+
2024-06-13 0225 14.280 lz2vu 59 59 < Bulgaria 1kW > @Juli #KN22dq
35+
36+
40m SSB
37+
2024-06-15 2257 7.225 k4oki 55 55 @Ryan US-6907
38+
39+
20m SSB
40+
14.225
41+
42+
2024-06-18 2348 14.308 KI5YOO 57 57 US-0307 < D'Arbonne National Wildlife Refuge > #EM32vp @Mark
43+
2024-06-18 2350 14.333 WI0O 57 57 US-11701 < Wood-Rill SNA State Sanctuary > #EN34fx @Sean
44+
2024-06-18 2350 14.333 WI0O 57 57 US-9387 < Luce Line State Trail > #EN34gx @Sean
45+
2024-06-19 0003 14.336 N4SAX 59 59 US-1873 < Fred Gannon Rocky Bayou State Park > #EM60sl @Randall #EM60sl
46+
47+
40m SSB
48+
49+
2024-06-19 0008 7.248 KD2ZWM 56 55 US-0064 < Shenandoah National Park > #FM08vv @Brady
50+
2024-06-19 0012 7.267 KO4ZRX 55 57 US-1790 @Ronny < Trail of Tears State Park > #EM57gk
51+
2024-06-19 0012 7.267 KO4ZRX 55 57 US-3791 @Ronny < Trail of Tears Trail > #EM57gk

test/docker-FLEcli.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
22

33
CURRENT_UID=$(id -u):$(id -g)
44
docker run --rm -t --user ${CURRENT_UID} -v "$(pwd)":/FLEcli_data on4kjm/flecli:latest "$@"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
ADIF Export for Fast Log Entry by DF3CB
2+
<PROGRAMID:3>FLE
3+
<ADIF_VER:5>3.1.0
4+
<EOH>
5+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>CU2YK <QSO_DATE:8>20240510 <TIME_ON:4>0000 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.260 <RST_SENT:2>59 <RST_RCVD:2>57 <GRIDSQUARE:6>HM77dt <MY_GRIDSQUARE:6>FM19je <EOR>
6+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KC0QNA <QSO_DATE:8>20240510 <TIME_ON:4>2137 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.273 <RST_SENT:2>55 <RST_RCVD:2>55 <GRIDSQUARE:6>EN24pk <SIG:4>POTA <SIG_INFO:7>US-2481 <MY_GRIDSQUARE:6>FM19je <EOR>
7+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>KP4PR <QSO_DATE:8>20240605 <TIME_ON:4>0220 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.317 <RST_SENT:2>59 <RST_RCVD:2>59 <GRIDSQUARE:6>FK68xk <NAME:4>Jose <MY_GRIDSQUARE:6>FM19je <EOR>
8+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>LZ2VU <QSO_DATE:8>20240605 <TIME_ON:4>0234 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.270 <RST_SENT:2>59 <RST_RCVD:2>59 <GRIDSQUARE:6>KN33gs <NAME:4>Juli <MY_GRIDSQUARE:6>FM19je <EOR>
9+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>DL5PIA <QSO_DATE:8>20240607 <TIME_ON:4>0448 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.250 <RST_SENT:2>57 <RST_RCVD:2>59 <GRIDSQUARE:6>JN48kn <COMMENT:13>Mother of Pia <NAME:5>Petra <MY_GRIDSQUARE:6>FM19je <EOR>
10+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>DL7PIA <QSO_DATE:8>20240607 <TIME_ON:4>0448 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.250 <RST_SENT:2>57 <RST_RCVD:2>59 <GRIDSQUARE:6>JN48kn <COMMENT:17>Daughter of Petra <NAME:3>Pia <MY_GRIDSQUARE:6>FM19je <EOR>
11+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>KD4GE <QSO_DATE:8>20240612 <TIME_ON:4>0045 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.266 <RST_SENT:2>57 <RST_RCVD:2>57 <GRIDSQUARE:6>EM93dk <NAME:6>Darryl <MY_GRIDSQUARE:6>FM19je <EOR>
12+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KO4NLL <QSO_DATE:8>20240612 <TIME_ON:4>0129 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.216 <RST_SENT:2>55 <RST_RCVD:2>55 <MY_GRIDSQUARE:6>FM19je <EOR>
13+
<STATION_CALLSIGN:6>KC3YQI <CALL:4>R5AJ <QSO_DATE:8>20240613 <TIME_ON:4>0301 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.225 <RST_SENT:2>59 <RST_RCVD:2>59 <GRIDSQUARE:6>KO95iu <COMMENT:30>Moscow, will upload to youtube <NAME:6>Valery <MY_GRIDSQUARE:6>FM19je <EOR>
14+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>LZ2VU <QSO_DATE:8>20240613 <TIME_ON:4>0225 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.280 <RST_SENT:2>59 <RST_RCVD:2>59 <GRIDSQUARE:6>KN22dq <COMMENT:12>Bulgaria 1kW <NAME:4>Juli <MY_GRIDSQUARE:6>FM19je <EOR>
15+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>K4OKI <QSO_DATE:8>20240615 <TIME_ON:4>2257 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.225 <RST_SENT:2>55 <RST_RCVD:2>55 <NAME:4>Ryan <SIG:4>POTA <SIG_INFO:7>US-6907 <MY_GRIDSQUARE:6>FM19je <EOR>
16+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KI5YOO <QSO_DATE:8>20240618 <TIME_ON:4>2348 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.308 <RST_SENT:2>57 <RST_RCVD:2>57 <GRIDSQUARE:6>EM32vp <COMMENT:34>D'Arbonne National Wildlife Refuge <NAME:4>Mark <SIG:4>POTA <SIG_INFO:7>US-0307 <MY_GRIDSQUARE:6>FM19je <EOR>
17+
<STATION_CALLSIGN:6>KC3YQI <CALL:4>WI0O <QSO_DATE:8>20240618 <TIME_ON:4>2350 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.333 <RST_SENT:2>57 <RST_RCVD:2>57 <GRIDSQUARE:6>EN34fx <COMMENT:29>Wood-Rill SNA State Sanctuary <NAME:4>Sean <SIG:4>POTA <SIG_INFO:8>US-11701 <MY_GRIDSQUARE:6>FM19je <EOR>
18+
<STATION_CALLSIGN:6>KC3YQI <CALL:4>WI0O <QSO_DATE:8>20240618 <TIME_ON:4>2350 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.333 <RST_SENT:2>57 <RST_RCVD:2>57 <GRIDSQUARE:6>EN34gx <COMMENT:21>Luce Line State Trail <NAME:4>Sean <SIG:4>POTA <SIG_INFO:7>US-9387 <MY_GRIDSQUARE:6>FM19je <EOR>
19+
<STATION_CALLSIGN:6>KC3YQI <CALL:5>N4SAX <QSO_DATE:8>20240619 <TIME_ON:4>0003 <BAND:3>20m <MODE:3>SSB <FREQ:6>14.336 <RST_SENT:2>59 <RST_RCVD:2>59 <GRIDSQUARE:6>EM60sl <COMMENT:34>Fred Gannon Rocky Bayou State Park <NAME:7>Randall <SIG:4>POTA <SIG_INFO:7>US-1873 <MY_GRIDSQUARE:6>FM19je <EOR>
20+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KD2ZWM <QSO_DATE:8>20240619 <TIME_ON:4>0008 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.248 <RST_SENT:2>56 <RST_RCVD:2>55 <GRIDSQUARE:6>FM08vv <COMMENT:24>Shenandoah National Park <NAME:5>Brady <SIG:4>POTA <SIG_INFO:7>US-0064 <MY_GRIDSQUARE:6>FM19je <EOR>
21+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KO4ZRX <QSO_DATE:8>20240619 <TIME_ON:4>0012 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.267 <RST_SENT:2>55 <RST_RCVD:2>57 <GRIDSQUARE:6>EM57gk <COMMENT:25>Trail of Tears State Park <NAME:5>Ronny <SIG:4>POTA <SIG_INFO:7>US-1790 <MY_GRIDSQUARE:6>FM19je <EOR>
22+
<STATION_CALLSIGN:6>KC3YQI <CALL:6>KO4ZRX <QSO_DATE:8>20240619 <TIME_ON:4>0012 <BAND:3>40m <MODE:3>SSB <FREQ:5>7.267 <RST_SENT:2>55 <RST_RCVD:2>57 <GRIDSQUARE:6>EM57gk <COMMENT:20>Trail of Tears Trail <NAME:5>Ronny <SIG:4>POTA <SIG_INFO:7>US-3791 <MY_GRIDSQUARE:6>FM19je <EOR>

0 commit comments

Comments
 (0)