kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
Merge branch 'jan-2024' into 'master'
Processing indicator for QSOs See merge request gridtracker.org/gridtracker!306 If this is changing anything in the UI or operational behavior, please prepare to update the wiki!fix-state-keys-shapesjson v1.23.1217
commit
15132c5243
|
@ -1,3 +1,12 @@
|
|||
gridtracker (1.23.1217) unstable; urgency=low
|
||||
- BIGCTY - Update from December 15th
|
||||
- System - Add QSO processing indicator
|
||||
- System - QSL location authority selector added in Settings > Logbook
|
||||
- Logbook Viewer - QSL sources added
|
||||
- Call Roster - Added Grid to Watcher and Ignores
|
||||
- Language - Updates to Chinese simplified and traditional translations
|
||||
- Logging - DX Keeper grid bug workaround
|
||||
-- Tag Loomis <n0ttl@gridtracker.org> Sun, 17 Dec 2023 00:00:00 -0000
|
||||
gridtracker (1.23.1207) unstable; urgency=high
|
||||
- BIGCTY - Update from December 5th
|
||||
- System - LoTW, eQSL and OQRS membership columns icon updated
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Name: {{{ git_name name=gridtracker }}}
|
||||
Summary: GridTracker: An Amateur Radio Companion
|
||||
Version: 1.23.1207
|
||||
Version: 1.23.1217
|
||||
Release: 1%{?dist}
|
||||
BuildArch: noarch
|
||||
Source0: {{{ git_dir_pack }}}
|
||||
|
@ -40,6 +40,14 @@ DESTDIR=${RPM_BUILD_ROOT} make clean
|
|||
%license %{_docdir}/%{name}/
|
||||
|
||||
%changelog
|
||||
* Sun Dec 17 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.1217-1
|
||||
- BIGCTY - Update from December 15th
|
||||
- System - Add QSO processing indicator
|
||||
- System - QSL location authority selector added in Settings > Logbook
|
||||
- Logbook Viewer - QSL sources added
|
||||
- Call Roster - Added Grid to Watcher and Ignores
|
||||
- Language - Updates to Chinese simplified and traditional translations
|
||||
- Logging - DX Keeper grid bug workaround
|
||||
* Thu Dec 07 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.1207-1
|
||||
- BIGCTY - Update from December 5th
|
||||
- System - LoTW, eQSL and OQRS membership columns icon updated
|
||||
|
|
|
@ -334,7 +334,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
align="right">
|
||||
QSO
|
||||
</td>
|
||||
<td style="cursor: pointer" class="roundBorderValue"
|
||||
<td style="cursor: pointer" class="roundBorderValue" id="qsoCountStyle"
|
||||
onclick="resetSearch(); openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox);" title="Worked Stations"
|
||||
align="center">
|
||||
<div id="qsoCount">0</div>
|
||||
|
@ -354,7 +354,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
title="Show Confirmed List" align="right">
|
||||
QSL
|
||||
</td>
|
||||
<td style="cursor: pointer" class="roundBorderValue"
|
||||
<td style="cursor: pointer" class="roundBorderValue" id="qslCountStyle"
|
||||
onclick="resetSearch(); GT.filterQSL='true'; openInfoTab('qsobox', 'workedBoxDiv', showWorkedBox)"
|
||||
title="Show Confirmed List" align="center">
|
||||
<div id="qslCount">0</div>
|
||||
|
@ -1610,7 +1610,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="mapItem">
|
||||
<div style="padding: 5px" class="mapItem">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td> QSL Location Authority</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<select id="qslAuthority" onchange="qslAuthorityChanged();">
|
||||
<option value="L">LoTW</option>
|
||||
<option value="Q">QRZ.com</option>
|
||||
<option value="e">eQSL</option>
|
||||
<option value="C">Clublog</option>
|
||||
<option value="O">Other</option>
|
||||
<option value="0">Last Loaded</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" style="padding: 5px">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td align="center">Logbook Items Per Page</td>
|
||||
|
|
|
@ -1517,7 +1517,7 @@
|
|||
"VE9TEN/5",
|
||||
"VE9XX/6",
|
||||
"VE9ZP/4",
|
||||
"VER20231205",
|
||||
"VER20231215",
|
||||
"VF0X",
|
||||
"VF0X/M",
|
||||
"VO/DL2GF",
|
||||
|
@ -2628,6 +2628,7 @@
|
|||
"K6VH",
|
||||
"K7BUF",
|
||||
"K7CAP",
|
||||
"K7DN",
|
||||
"K7EJM",
|
||||
"K7LOP",
|
||||
"K7MVX",
|
||||
|
@ -3085,6 +3086,7 @@
|
|||
"KK6BVH",
|
||||
"KK6CAU",
|
||||
"KK6IMB",
|
||||
"KK6IQC",
|
||||
"KK6IUY",
|
||||
"KK6LL",
|
||||
"KK6NRF",
|
||||
|
@ -10568,6 +10570,7 @@
|
|||
"R11QRP/8/P",
|
||||
"R11QRP/9",
|
||||
"R11UND",
|
||||
"R120I",
|
||||
"R120RAEM",
|
||||
"R120RB",
|
||||
"R120RDP",
|
||||
|
@ -10580,7 +10583,10 @@
|
|||
"R120RU",
|
||||
"R120RW",
|
||||
"R120RZ",
|
||||
"R120S",
|
||||
"R120T",
|
||||
"R120TM",
|
||||
"R120W",
|
||||
"R123JDR",
|
||||
"R125NSK",
|
||||
"R135TU",
|
||||
|
@ -10830,6 +10836,7 @@
|
|||
"R71RRC",
|
||||
"R7378TM",
|
||||
"R73EPC/P",
|
||||
"R73YOTA",
|
||||
"R750X",
|
||||
"R7AA/0",
|
||||
"R7AB/0",
|
||||
|
@ -12242,6 +12249,7 @@
|
|||
"UA3WB/9",
|
||||
"UA3YH/0",
|
||||
"UA3ZAF/9",
|
||||
"UA4FMQ/P",
|
||||
"UA4LCQ/9",
|
||||
"UA4LU/0",
|
||||
"UA4LU/9/P",
|
||||
|
@ -15245,6 +15253,7 @@
|
|||
"RW9C": "20",
|
||||
"RX9CC": "20",
|
||||
"R0MQ/9": "31",
|
||||
"R120I": "31",
|
||||
"R135TU": "31",
|
||||
"R140TU": "31",
|
||||
"R2BDY/9": "31",
|
||||
|
@ -15961,6 +15970,7 @@
|
|||
"RQ0J/QRP": "33",
|
||||
"RU3HD/0": "33",
|
||||
"RW80KEDR": "33",
|
||||
"UA4FMQ/P": "33",
|
||||
"UA9MUY/0": "33",
|
||||
"UE75OJ": "33",
|
||||
"R2015RY": "25",
|
||||
|
@ -16149,6 +16159,7 @@
|
|||
"UE60QA": "23",
|
||||
"UE6MAC/0": "23",
|
||||
"R11QRP/9": "32",
|
||||
"R120W": "32",
|
||||
"R150LA": "32",
|
||||
"R150LB": "32",
|
||||
"R18SWE": "32",
|
||||
|
@ -16399,6 +16410,7 @@
|
|||
"UE18U": "18",
|
||||
"UE18Z": "19",
|
||||
"R0MQ/9": "18",
|
||||
"R120I": "18",
|
||||
"R135TU": "18",
|
||||
"R140TU": "18",
|
||||
"R2BDY/9": "18",
|
||||
|
@ -17235,6 +17247,7 @@
|
|||
"RQ0J/QRP": "19",
|
||||
"RU3HD/0": "19",
|
||||
"RW80KEDR": "19",
|
||||
"UA4FMQ/P": "19",
|
||||
"UA9MUY/0": "19",
|
||||
"UE75OJ": "19",
|
||||
"R2015RY": "19",
|
||||
|
@ -17423,6 +17436,7 @@
|
|||
"UE60QA": "19",
|
||||
"UE6MAC/0": "19",
|
||||
"R11QRP/9": "18",
|
||||
"R120W": "18",
|
||||
"R150LA": "18",
|
||||
"R150LB": "18",
|
||||
"R18SWE": "18",
|
||||
|
@ -20445,8 +20459,10 @@
|
|||
"R100RK",
|
||||
"R100UD",
|
||||
"R110A/P",
|
||||
"R120K",
|
||||
"R120RK",
|
||||
"R120RP",
|
||||
"R120X",
|
||||
"R155PM",
|
||||
"R160PM",
|
||||
"R16NOR",
|
||||
|
@ -21471,7 +21487,6 @@
|
|||
"UA3YH/ANT",
|
||||
"UA4ASE/FF",
|
||||
"UA4ATL/FF",
|
||||
"UA4FMQ/P",
|
||||
"UA4H",
|
||||
"UA4HAZ/P",
|
||||
"UA4HBM",
|
||||
|
@ -22480,6 +22495,7 @@
|
|||
"R0000O": "19",
|
||||
"R100FA": "19",
|
||||
"R100K": "19",
|
||||
"R120K": "19",
|
||||
"R20ARRS": "19",
|
||||
"R25ILIM": "19",
|
||||
"R350AR": "19",
|
||||
|
@ -22591,6 +22607,7 @@
|
|||
"RZ30RR": "19",
|
||||
"UB1Z": "19",
|
||||
"UB1ZBD/N": "19",
|
||||
"R120X": "30",
|
||||
"R170SG": "30",
|
||||
"R2023EN": "30",
|
||||
"R20SAM": "30",
|
||||
|
@ -22700,7 +22717,7 @@
|
|||
"UE77MR": "30",
|
||||
"UE77WT": "30",
|
||||
"UF4H": "30",
|
||||
"UG4I": "30",
|
||||
"UG4I": "29",
|
||||
"UG4I/P": "30",
|
||||
"UI4H": "30",
|
||||
"UI4I": "29",
|
||||
|
@ -23480,9 +23497,7 @@
|
|||
"confirmed_bands": {},
|
||||
"worked_modes": {},
|
||||
"confirmed_modes": {},
|
||||
"direct": [
|
||||
"VERSION"
|
||||
],
|
||||
"direct": [],
|
||||
"prefixITU": {},
|
||||
"prefixCQ": {},
|
||||
"directITU": {},
|
||||
|
@ -30349,7 +30364,6 @@
|
|||
"AC6IF",
|
||||
"AC9PT",
|
||||
"AD6YJ",
|
||||
"AE3TT",
|
||||
"AE5AB",
|
||||
"AE5LR",
|
||||
"AE7QR",
|
||||
|
@ -30547,6 +30561,7 @@
|
|||
"KC9KEX",
|
||||
"KC9NJG",
|
||||
"KC9SBG",
|
||||
"KC9WIB",
|
||||
"KD0JNO",
|
||||
"KD0OLJ",
|
||||
"KD0OXU",
|
||||
|
@ -31036,7 +31051,6 @@
|
|||
"WK1K",
|
||||
"WL7CSW",
|
||||
"WL7CSW/H",
|
||||
"WL7M",
|
||||
"WV0Z",
|
||||
"WV6K",
|
||||
"WW7CC",
|
||||
|
@ -35775,7 +35789,8 @@
|
|||
"worked_modes": {},
|
||||
"confirmed_modes": {},
|
||||
"direct": [
|
||||
"3D5X"
|
||||
"3D5X",
|
||||
"VERSION"
|
||||
],
|
||||
"prefixITU": {},
|
||||
"prefixCQ": {},
|
||||
|
@ -38203,6 +38218,7 @@
|
|||
"OH6OG/SA",
|
||||
"OH6OS/S",
|
||||
"OH6OT/S",
|
||||
"OH6P/S",
|
||||
"OH6P/SA",
|
||||
"OH6PA/S",
|
||||
"OH6QR/S",
|
||||
|
@ -38479,6 +38495,7 @@
|
|||
"F/ON7RU/LH",
|
||||
"F/PH2CV/LH",
|
||||
"F4FET/LH",
|
||||
"F4IGB/TRC",
|
||||
"F5HPY/LH",
|
||||
"F5NBX/LH",
|
||||
"F5NMK/LH",
|
||||
|
@ -41364,6 +41381,7 @@
|
|||
"GB8SPD",
|
||||
"GB8STM",
|
||||
"GB8UKR",
|
||||
"GB8WWA",
|
||||
"GB90RSGB/82",
|
||||
"GB90SOM",
|
||||
"GB9AFD",
|
||||
|
@ -42524,6 +42542,7 @@
|
|||
"GB0SFM",
|
||||
"GB0SHP",
|
||||
"GB0SI",
|
||||
"GB0SIC",
|
||||
"GB0SIM",
|
||||
"GB0SJR",
|
||||
"GB0SK",
|
||||
|
@ -42754,6 +42773,7 @@
|
|||
"GB4SMM",
|
||||
"GB4SRO",
|
||||
"GB4SWF",
|
||||
"GB4WWA",
|
||||
"GB50FVS",
|
||||
"GB50GDS",
|
||||
"GB50GT",
|
||||
|
@ -45456,6 +45476,7 @@
|
|||
"AD4MM",
|
||||
"AD5S",
|
||||
"AD5XX",
|
||||
"AE3TT",
|
||||
"AE4RM",
|
||||
"AE6CA",
|
||||
"AE6I",
|
||||
|
@ -46300,7 +46321,6 @@
|
|||
"KC9HYY/LUS100",
|
||||
"KC9HYY/MMD",
|
||||
"KC9JDB",
|
||||
"KC9WIB",
|
||||
"KD0EBY",
|
||||
"KD0ETC/LH",
|
||||
"KD0FDP",
|
||||
|
@ -47454,6 +47474,7 @@
|
|||
"KL3TY",
|
||||
"KL3UA",
|
||||
"KL3UX",
|
||||
"KL3UY",
|
||||
"KL3VA",
|
||||
"KL3VJ",
|
||||
"KL3VN",
|
||||
|
@ -48314,6 +48335,7 @@
|
|||
"KY0C",
|
||||
"KY7W",
|
||||
"KZ5DX",
|
||||
"KZ9G",
|
||||
"KZ9V",
|
||||
"N0BHR",
|
||||
"N0CO",
|
||||
|
@ -48431,6 +48453,7 @@
|
|||
"N5UC",
|
||||
"N5WE",
|
||||
"N5XKG",
|
||||
"N5YDC",
|
||||
"N5YIZ",
|
||||
"N5ZWF",
|
||||
"N6AI",
|
||||
|
@ -49390,6 +49413,7 @@
|
|||
"WH6ADS",
|
||||
"WH6AFM",
|
||||
"WH6AFV",
|
||||
"WH6AIR",
|
||||
"WH6AJS",
|
||||
"WH6AKZ",
|
||||
"WH6AM",
|
||||
|
@ -51627,6 +51651,7 @@
|
|||
"KL7GLK/B": "07",
|
||||
"KL7GT": "07",
|
||||
"KL7HR": "07",
|
||||
"KL7IEI": "07",
|
||||
"KL7IWT": "07",
|
||||
"KL7IXI": "07",
|
||||
"KL7JGJ": "07",
|
||||
|
@ -53005,6 +53030,7 @@
|
|||
"N4UK": "08",
|
||||
"N4Z": "08",
|
||||
"N5HPW": "08",
|
||||
"N5YDC": "08",
|
||||
"N6RMQ": "08",
|
||||
"N6TSM": "08",
|
||||
"N7CGC": "08",
|
||||
|
@ -53221,6 +53247,7 @@
|
|||
"WH2G": "08",
|
||||
"WH6A": "08",
|
||||
"WH6ACF": "08",
|
||||
"WH6AIR": "08",
|
||||
"WH6AJS": "08",
|
||||
"WH6AQ": "08",
|
||||
"WH6AVU": "08",
|
||||
|
@ -55214,6 +55241,7 @@
|
|||
"KL3TQ": "06",
|
||||
"KL3TW": "06",
|
||||
"KL3TY": "06",
|
||||
"KL3UY": "06",
|
||||
"KL3VJ": "06",
|
||||
"KL3XS": "06",
|
||||
"KL4AO": "06",
|
||||
|
@ -55294,7 +55322,6 @@
|
|||
"KL7IAL": "06",
|
||||
"KL7IBT": "06",
|
||||
"KL7IDY": "06",
|
||||
"KL7IEI": "06",
|
||||
"KL7IFK": "06",
|
||||
"KL7IG": "06",
|
||||
"KL7IGB": "06",
|
||||
|
@ -56072,6 +56099,7 @@
|
|||
"WP4PLR": "08",
|
||||
"WT3A": "08",
|
||||
"AC9H": "08",
|
||||
"AE3TT": "08",
|
||||
"AH6DA": "08",
|
||||
"AH6EZ/9": "08",
|
||||
"AH6OM": "08",
|
||||
|
@ -56108,7 +56136,6 @@
|
|||
"KC9HYY/EOI": "08",
|
||||
"KC9HYY/LUS100": "08",
|
||||
"KC9HYY/MMD": "08",
|
||||
"KC9WIB": "08",
|
||||
"KD9Q/M": "08",
|
||||
"KD9TWW": "08",
|
||||
"KE5DDD": "08",
|
||||
|
@ -56165,6 +56192,7 @@
|
|||
"KP4TD": "08",
|
||||
"KP4WG": "08",
|
||||
"KV4AA": "08",
|
||||
"KZ9G": "08",
|
||||
"KZ9V": "08",
|
||||
"N3QKX": "08",
|
||||
"N4RIH": "08",
|
||||
|
@ -56684,6 +56712,7 @@
|
|||
"KL7GLK/B": "04",
|
||||
"KL7GT": "04",
|
||||
"KL7HR": "04",
|
||||
"KL7IEI": "04",
|
||||
"KL7IWT": "04",
|
||||
"KL7IXI": "04",
|
||||
"KL7JGJ": "04",
|
||||
|
@ -58062,6 +58091,7 @@
|
|||
"N4UK": "05",
|
||||
"N4Z": "05",
|
||||
"N5HPW": "05",
|
||||
"N5YDC": "05",
|
||||
"N6RMQ": "05",
|
||||
"N6TSM": "05",
|
||||
"N7CGC": "05",
|
||||
|
@ -58278,6 +58308,7 @@
|
|||
"WH2G": "05",
|
||||
"WH6A": "05",
|
||||
"WH6ACF": "05",
|
||||
"WH6AIR": "05",
|
||||
"WH6AJS": "05",
|
||||
"WH6AQ": "05",
|
||||
"WH6AVU": "05",
|
||||
|
@ -60271,6 +60302,7 @@
|
|||
"KL3TQ": "03",
|
||||
"KL3TW": "03",
|
||||
"KL3TY": "03",
|
||||
"KL3UY": "03",
|
||||
"KL3VJ": "03",
|
||||
"KL3XS": "03",
|
||||
"KL4AO": "03",
|
||||
|
@ -60351,7 +60383,6 @@
|
|||
"KL7IAL": "03",
|
||||
"KL7IBT": "03",
|
||||
"KL7IDY": "03",
|
||||
"KL7IEI": "03",
|
||||
"KL7IFK": "03",
|
||||
"KL7IG": "03",
|
||||
"KL7IGB": "03",
|
||||
|
@ -61129,6 +61160,7 @@
|
|||
"WP4PLR": "04",
|
||||
"WT3A": "04",
|
||||
"AC9H": "04",
|
||||
"AE3TT": "04",
|
||||
"AH6DA": "04",
|
||||
"AH6EZ/9": "04",
|
||||
"AH6OM": "04",
|
||||
|
@ -61165,7 +61197,6 @@
|
|||
"KC9HYY/EOI": "04",
|
||||
"KC9HYY/LUS100": "04",
|
||||
"KC9HYY/MMD": "04",
|
||||
"KC9WIB": "04",
|
||||
"KD9Q/M": "04",
|
||||
"KD9TWW": "04",
|
||||
"KE5DDD": "04",
|
||||
|
@ -61222,6 +61253,7 @@
|
|||
"KP4TD": "04",
|
||||
"KP4WG": "04",
|
||||
"KV4AA": "04",
|
||||
"KZ9G": "04",
|
||||
"KZ9V": "04",
|
||||
"N3QKX": "04",
|
||||
"N4RIH": "04",
|
||||
|
@ -62134,6 +62166,7 @@
|
|||
"GB50RSC",
|
||||
"GB50SGP",
|
||||
"GB5AC",
|
||||
"GB5ANT",
|
||||
"GB5BPL",
|
||||
"GB5FI",
|
||||
"GB5GEO",
|
||||
|
@ -62162,6 +62195,7 @@
|
|||
"GB6TS",
|
||||
"GB6TSG",
|
||||
"GB6WT",
|
||||
"GB6WWA",
|
||||
"GB6WWT",
|
||||
"GB70BTF",
|
||||
"GB70W",
|
||||
|
|
|
@ -285,8 +285,9 @@
|
|||
</td>
|
||||
<td>
|
||||
<select id="watcherType" onchange="watcherTypeChanged(this.value)">
|
||||
<option value="Callsign">Callsign</option>
|
||||
<option value="Calling">Calling</option>
|
||||
<option value="Callsign" data-i18n="roster.controls.hunting.callsign">Callsign</option>
|
||||
<option value="Calling" data-i18n="alerts.QRZ.speech">Calling</option>
|
||||
<option value="Grid" data-i18n="roster.controls.hunting.grid">Grid</option>
|
||||
<option value="Message" data-i18n="gt.WSJTMessage.Message">Message</option>
|
||||
</select>
|
||||
</td>
|
||||
|
@ -408,10 +409,12 @@
|
|||
<option value="Callsign" selected="true">Callsign</option>
|
||||
<option value="CQ">CQ</option>
|
||||
<option value="DXCC">DXCC</option>
|
||||
<option value="Grid">Grid</option>
|
||||
<option value="CQz">CQ Zone</option>
|
||||
<option value="ITUz">ITU Zone</option>
|
||||
</select>
|
||||
<input id="ignoreCallsignValue" type="text" class="inputTextValue" oninput="this.value = this.value.toUpperCase()" size="10"/>
|
||||
<input id="ignoreGridValue" type="text" class="inputTextValue" oninput="gridInputValidate(this)" size="10"/>
|
||||
<div id ="ignoreCqDiv">
|
||||
CQ "<input id="ignoreCqCallsignValue" type="text" class="inputTextValue" oninput="this.value = this.value.toUpperCase()" size="4" value=""/>"
|
||||
From
|
||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -250,7 +250,7 @@
|
|||
"312": "柬埔寨",
|
||||
"315": "斯里兰卡",
|
||||
"318": "中国",
|
||||
"321": "国香港",
|
||||
"321": "香港",
|
||||
"324": "印度",
|
||||
"327": "印度尼西亚",
|
||||
"330": "伊朗",
|
||||
|
@ -328,8 +328,8 @@
|
|||
"502": "北马其顿",
|
||||
"503": "捷克",
|
||||
"504": "斯洛伐克",
|
||||
"505": "国东沙群岛",
|
||||
"506": "国黄岩岛",
|
||||
"505": "东沙群岛",
|
||||
"506": "黄岩岛",
|
||||
"507": "泰莫图省",
|
||||
"508": "南方群岛",
|
||||
"509": "马克萨斯岛",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"The GridTracker Team",
|
||||
"VR2UPU"
|
||||
],
|
||||
"last-updated": "2023-12-03",
|
||||
"last-updated": "2023-12-07",
|
||||
"locale": "hk",
|
||||
"message-documentation": "Traditional Chinese: VR2UPU"
|
||||
},
|
||||
|
@ -576,7 +576,7 @@
|
|||
"roster.secondary.exceptions.onlyMyDXCC": "我需要的DXCC",
|
||||
"roster.secondary.exceptions.useseQSL": "eQSL用戶",
|
||||
"roster.secondary.exceptions.usesOQRS": "OQRS用戶",
|
||||
"roster.secondary.exceptions.allOnlyNew": "僅限新呼號",
|
||||
"roster.secondary.exceptions.allOnlyNew": "新呼號",
|
||||
"roster.secondary.exceptions.wantRRCQ": "RR73當作CQ",
|
||||
"roster.secondary.exceptions.noUnknownDXCC": "禁止不明DXCC",
|
||||
"roster.secondary.exceptions.noMsg.label": "不包含",
|
||||
|
@ -624,7 +624,7 @@
|
|||
"adif.LoggedHRDLogbook": "已記錄到 HRD Logbook",
|
||||
"adif.ExceptionHRDLogbook": "HRD 日誌異常",
|
||||
"adif.ExceptionLoTW": "LoTW 日誌異常",
|
||||
"adif.ExceptionAlertLog": "Alert 日誌異常",
|
||||
"adif.ExceptionAlertLog": "警報日誌異常",
|
||||
"adif.ExceptionHideLookup": "隱藏查找異常",
|
||||
"adif.BadPassUser": "錯誤<br/>密碼<br/>或<br/>暱稱",
|
||||
"adif.UnknownCall": "不明<br/>呼號",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"The GridTracker Team",
|
||||
"BD3OOX"
|
||||
],
|
||||
"last-updated": "2023-12-02",
|
||||
"last-updated": "2023-12-07",
|
||||
"locale": "cn",
|
||||
"message-documentation": "Simplified Chinese: BD3OOX"
|
||||
},
|
||||
|
@ -576,11 +576,11 @@
|
|||
"roster.secondary.exceptions.onlyMyDXCC": "我需要的DXCC",
|
||||
"roster.secondary.exceptions.useseQSL": "在用eQSL",
|
||||
"roster.secondary.exceptions.usesOQRS": "在用OQRS",
|
||||
"roster.secondary.exceptions.allOnlyNew": "仅限新呼号",
|
||||
"roster.secondary.exceptions.allOnlyNew": "新呼号",
|
||||
"roster.secondary.exceptions.wantRRCQ": "RR73当作CQ",
|
||||
"roster.secondary.exceptions.noUnknownDXCC": "禁止不明DXCC",
|
||||
"roster.secondary.exceptions.noMsg.label": "不包含",
|
||||
"roster.secondary.exceptions.noMsg.hover": "不包含解码...",
|
||||
"roster.secondary.exceptions.noMsg.hover": "不包含的解码...",
|
||||
"roster.secondary.exceptions.onlyMsg.label": "仅限",
|
||||
"roster.secondary.exceptions.onlyMsg.hover": "仅限包含的解码...",
|
||||
"roster.secondary.exceptions.regex.label": "呼号匹配",
|
||||
|
@ -624,8 +624,8 @@
|
|||
"adif.LoggedHRDLogbook": "已保存到 HRD Logbook",
|
||||
"adif.ExceptionHRDLogbook": "HRD 日志异常",
|
||||
"adif.ExceptionLoTW": "LoTW 日志异常",
|
||||
"adif.ExceptionAlertLog": "Alert 日志异常",
|
||||
"adif.ExceptionHideLookup": "Hide Lookup 异常",
|
||||
"adif.ExceptionAlertLog": "警报日志异常",
|
||||
"adif.ExceptionHideLookup": "隐藏查找异常",
|
||||
"adif.BadPassUser": "错误<br/>密码<br/>或<br/>昵称",
|
||||
"adif.UnknownCall": "未知<br/>呼号",
|
||||
"adif.QTHNickname": "需要<br/>QTH昵称",
|
||||
|
|
|
@ -250,7 +250,7 @@
|
|||
"312": "柬埔寨",
|
||||
"315": "斯里蘭卡",
|
||||
"318": "中國",
|
||||
"321": "國香港",
|
||||
"321": "香港",
|
||||
"324": "印度",
|
||||
"327": "印度尼西亞",
|
||||
"330": "伊朗",
|
||||
|
@ -328,8 +328,8 @@
|
|||
"502": "北馬其頓",
|
||||
"503": "捷克",
|
||||
"504": "斯洛伐克",
|
||||
"505": "國東沙群島",
|
||||
"506": "國黃岩島",
|
||||
"505": "東沙群島",
|
||||
"506": "黃岩島",
|
||||
"507": "泰莫圖省",
|
||||
"508": "南方群島",
|
||||
"509": "馬克薩斯島",
|
||||
|
|
|
@ -662,7 +662,7 @@
|
|||
"alerts.callsign.popup": "Ricerca",
|
||||
"alerts.gridsquare.speech": "Grid square",
|
||||
"alerts.gridsquare.popup": "Grid square",
|
||||
"alerts.QRZ.speech": "Chiamata",
|
||||
"alerts.QRZ.speech": "Chiamando",
|
||||
"alerts.QRZ.popup": "QRZ",
|
||||
"alerts.AlertPop.Type": "Tipo",
|
||||
"alerts.AlertPop.Value": "Valore",
|
||||
|
|
|
@ -81,6 +81,14 @@ function findAdiField(row, field)
|
|||
return value;
|
||||
}
|
||||
|
||||
GT.confSrcNames = {
|
||||
C: "Clublog",
|
||||
e: "eQSL",
|
||||
L: "LoTW",
|
||||
Q: "QRZ.com",
|
||||
O: "Other"
|
||||
}
|
||||
|
||||
function onAdiLoadComplete(adiBuffer)
|
||||
{
|
||||
var rawAdiBuffer = "";
|
||||
|
@ -90,11 +98,18 @@ function onAdiLoadComplete(adiBuffer)
|
|||
var activeAdifArray = Array();
|
||||
var activeAdifLogMode = true;
|
||||
var eQSLfile = false;
|
||||
var clublogFile = false;
|
||||
var lotwTimestampUpdated = false;
|
||||
|
||||
if (rawAdiBuffer.indexOf("PSKReporter") > -1) activeAdifLogMode = false;
|
||||
|
||||
if (activeAdifLogMode == true)
|
||||
{
|
||||
qsoCountStyle.className = "roundBorderValue QsoQslActive";
|
||||
qslCountStyle.className = "roundBorderValue QsoQslActive";
|
||||
}
|
||||
if (rawAdiBuffer.indexOf("Received eQSLs") > -1) eQSLfile = true;
|
||||
if (rawAdiBuffer.indexOf("clublog.adif") > -1 || rawAdiBuffer.indexOf("ADIF export from Club Log") > -1) clublogFile = true;
|
||||
|
||||
if (rawAdiBuffer.length > 1)
|
||||
{
|
||||
|
@ -114,6 +129,8 @@ function onAdiLoadComplete(adiBuffer)
|
|||
{
|
||||
if (activeAdifLogMode)
|
||||
{
|
||||
let confSource = null;
|
||||
let lotwConfirmed = false;
|
||||
// let object = parseADIFRecord(activeAdifArray[x]);
|
||||
var appLoTW_RXQSO = findAdiField(activeAdifArray[x], "APP_LOTW_RXQSO");
|
||||
if (appLoTW_RXQSO != "")
|
||||
|
@ -145,6 +162,7 @@ function onAdiLoadComplete(adiBuffer)
|
|||
GT.adifLogSettings.lastFetch.lotw_qsl = timestring.slice(0, 10) + " " + timestring.slice(11, 19);
|
||||
lotwTimestampUpdated = true;
|
||||
}
|
||||
lotwConfirmed = true;
|
||||
}
|
||||
|
||||
var finalDEcall = findAdiField(activeAdifArray[x], "STATION_CALLSIGN").replace("_", "/");
|
||||
|
@ -288,6 +306,26 @@ function onAdiLoadComplete(adiBuffer)
|
|||
if (qrzConfirmed == "C" || lotw_qsl_rcvd == "Y" || lotw_qsl_rcvd == "V" || lotwConfirmed1 == "Y" || eqsl_qsl_rcvd == "Y" || eqsl_qsl_rcvd == "V" || eQSLfile == true)
|
||||
{
|
||||
confirmed = true;
|
||||
if (qrzConfirmed == "C")
|
||||
{
|
||||
confSource = "Q";
|
||||
}
|
||||
else if (eQSLfile == true)
|
||||
{
|
||||
confSource = "e";
|
||||
}
|
||||
else if (lotwConfirmed == true)
|
||||
{
|
||||
confSource = "L";
|
||||
}
|
||||
else if (clublogFile == true)
|
||||
{
|
||||
confSource = "C";
|
||||
}
|
||||
else
|
||||
{
|
||||
confSource = "O";
|
||||
}
|
||||
}
|
||||
|
||||
finalGrid = finalGrid.substr(0, 6);
|
||||
|
@ -340,7 +378,8 @@ function onAdiLoadComplete(adiBuffer)
|
|||
isPhone,
|
||||
finalIOTA,
|
||||
finalSatName,
|
||||
finalPOTA
|
||||
finalPOTA,
|
||||
confSource
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -507,6 +546,12 @@ function clubLogCallback(buffer, flag, cookie)
|
|||
GT.isGettingClub = false;
|
||||
function grabClubLog(test)
|
||||
{
|
||||
if (fs.existsSync(GT.clublogLogFile) && getFilesizeInBytes(GT.clublogLogFile) > 0)
|
||||
{
|
||||
GT.fromDirectCallNoFileDialog = true;
|
||||
onAdiLoadComplete(fs.readFileSync(GT.clublogLogFile));
|
||||
}
|
||||
|
||||
if (GT.isGettingClub == false)
|
||||
{
|
||||
if (test) clubTestResult.innerHTML = "Testing";
|
||||
|
@ -559,7 +604,6 @@ function cleanAndPrepADIF(name, adiBuffer, reverse = false, noheader = false)
|
|||
regex = new RegExp("<EOH>", "i");
|
||||
var adiArray = rawAdiBuffer.split(regex);
|
||||
var activeAdifArray = Array();
|
||||
var activeAdifLogMode = true;
|
||||
var finalBuffer = "";
|
||||
|
||||
if (noheader == false) finalBuffer = name + "<EOH>\r\n";
|
||||
|
@ -808,6 +852,12 @@ function qrzCallback(buffer, flag)
|
|||
GT.isGettingQRZCom = false;
|
||||
function grabQrzComLog(test)
|
||||
{
|
||||
if (fs.existsSync(GT.QrzLogFile) && getFilesizeInBytes(GT.QrzLogFile) > 0)
|
||||
{
|
||||
GT.fromDirectCallNoFileDialog = true;
|
||||
onAdiLoadComplete(fs.readFileSync(GT.QrzLogFile));
|
||||
}
|
||||
|
||||
if (GT.isGettingQRZCom == false)
|
||||
{
|
||||
var action = "FETCH";
|
||||
|
@ -1437,21 +1487,11 @@ function startupAdifLoadCheck()
|
|||
{
|
||||
logEventMedia.value = GT.alertSettings.logEventMedia;
|
||||
|
||||
loadWsjtLogFile();
|
||||
|
||||
if (loadGTCheckBox.checked == true) loadGtQSOLogFile();
|
||||
|
||||
if (loadAdifCheckBox.checked == true && GT.startupLogs.length > 0)
|
||||
{ startupAdifLoadFunction(); }
|
||||
if (loadAdifCheckBox.checked == true && GT.startupLogs.length > 0) startupAdifLoadFunction();
|
||||
|
||||
if (GT.mapSettings.offlineMode == false)
|
||||
{
|
||||
if (GT.appSettings.gtFlagImgSrc == 1) showGtFlags();
|
||||
|
||||
if (loadLOTWCheckBox.checked == true)
|
||||
{
|
||||
grabLOtWLog(false);
|
||||
}
|
||||
if (loadLOTWCheckBox.checked == true) grabLOtWLog(false);
|
||||
|
||||
if (loadQRZCheckBox.checked == true) grabQrzComLog(false);
|
||||
|
||||
|
@ -1459,6 +1499,10 @@ function startupAdifLoadCheck()
|
|||
|
||||
if (loadPsk24CheckBox.checked == true) grabPsk24();
|
||||
}
|
||||
|
||||
if (loadGTCheckBox.checked == true) loadGtQSOLogFile();
|
||||
|
||||
loadWsjtLogFile();
|
||||
}
|
||||
|
||||
function getABuffer(file_url, callback, flag, mode, port, imgToGray, stringOfFlag, timeoutX)
|
||||
|
@ -2005,11 +2049,7 @@ function finishSendingReport(record, localMode)
|
|||
addLastTraffic("<font style='color:white'>Spotted to POTA</font>");
|
||||
}
|
||||
|
||||
if (
|
||||
GT.N1MMSettings.enable == true &&
|
||||
GT.N1MMSettings.port > 1024 &&
|
||||
GT.N1MMSettings.ip.length > 4
|
||||
)
|
||||
if (GT.N1MMSettings.enable == true && GT.N1MMSettings.port > 1024 && GT.N1MMSettings.ip.length > 4)
|
||||
{
|
||||
sendUdpMessage(
|
||||
report,
|
||||
|
@ -2020,11 +2060,7 @@ function finishSendingReport(record, localMode)
|
|||
addLastTraffic("<font style='color:white'>Logged to N1MM</font>");
|
||||
}
|
||||
|
||||
if (
|
||||
GT.log4OMSettings.enable == true &&
|
||||
GT.log4OMSettings.port > 1024 &&
|
||||
GT.log4OMSettings.ip.length > 4
|
||||
)
|
||||
if (GT.log4OMSettings.enable == true && GT.log4OMSettings.port > 1024 && GT.log4OMSettings.ip.length > 4)
|
||||
{
|
||||
sendUdpMessage(
|
||||
"ADD " + report,
|
||||
|
@ -2058,9 +2094,7 @@ function finishSendingReport(record, localMode)
|
|||
catch (e)
|
||||
{
|
||||
console.log(e);
|
||||
addLastTraffic(
|
||||
"<font style='color:red'>Exception GridTracker backup</font>"
|
||||
);
|
||||
addLastTraffic("<font style='color:red'>Exception GridTracker backup</font>");
|
||||
}
|
||||
|
||||
try
|
||||
|
@ -2099,11 +2133,7 @@ function finishSendingReport(record, localMode)
|
|||
addLastTraffic("<font style='color:red'>Exception Cloudlog Log</font>");
|
||||
}
|
||||
|
||||
if (
|
||||
GT.acLogSettings.enable == true &&
|
||||
GT.acLogSettings.port > 0 &&
|
||||
GT.acLogSettings.ip.length > 4
|
||||
)
|
||||
if (GT.acLogSettings.enable == true && GT.acLogSettings.port > 0 && GT.acLogSettings.ip.length > 4)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -2116,19 +2146,29 @@ function finishSendingReport(record, localMode)
|
|||
}
|
||||
}
|
||||
|
||||
if (
|
||||
GT.dxkLogSettings.enable == true &&
|
||||
GT.dxkLogSettings.port > 0 &&
|
||||
GT.dxkLogSettings.ip.length > 4
|
||||
)
|
||||
if (GT.dxkLogSettings.enable == true && GT.dxkLogSettings.port > 0 && GT.dxkLogSettings.ip.length > 4)
|
||||
{
|
||||
try
|
||||
{
|
||||
sendDXKeeperLogMessage(
|
||||
report,
|
||||
GT.dxkLogSettings.port,
|
||||
GT.dxkLogSettings.ip
|
||||
);
|
||||
let DXreport = "";
|
||||
for (const key in record)
|
||||
{
|
||||
if ("MY_GRIDSQUARE" in record)
|
||||
{
|
||||
record.MY_GRIDSQUARE = record.MY_GRIDSQUARE.substr(0, 6);
|
||||
}
|
||||
if ("GRIDSQUARE" in record)
|
||||
{
|
||||
record.GRIDSQUARE = record.GRIDSQUARE.substr(0, 6);
|
||||
}
|
||||
if (key != "POTA")
|
||||
{
|
||||
DXreport += "<" + key + ":" + Buffer.byteLength(record[key]) + ">" + record[key] + " ";
|
||||
}
|
||||
}
|
||||
DXreport += "<EOR>";
|
||||
|
||||
sendDXKeeperLogMessage(DXreport, GT.dxkLogSettings.port, GT.dxkLogSettings.ip);
|
||||
addLastTraffic("<font style='color:white'>Logged to DXKeeper</font>");
|
||||
}
|
||||
catch (e)
|
||||
|
@ -2137,22 +2177,12 @@ function finishSendingReport(record, localMode)
|
|||
}
|
||||
}
|
||||
|
||||
if (
|
||||
GT.HRDLogbookLogSettings.enable == true &&
|
||||
GT.HRDLogbookLogSettings.port > 0 &&
|
||||
GT.HRDLogbookLogSettings.ip.length > 4
|
||||
)
|
||||
if (GT.HRDLogbookLogSettings.enable == true && GT.HRDLogbookLogSettings.port > 0 && GT.HRDLogbookLogSettings.ip.length > 4)
|
||||
{
|
||||
try
|
||||
{
|
||||
sendHRDLogbookEntry(
|
||||
record,
|
||||
GT.HRDLogbookLogSettings.port,
|
||||
GT.HRDLogbookLogSettings.ip
|
||||
);
|
||||
addLastTraffic(
|
||||
"<font style='color:white'>Logged to HRD Logbook</font>"
|
||||
);
|
||||
sendHRDLogbookEntry(record, GT.HRDLogbookLogSettings.port, GT.HRDLogbookLogSettings.ip);
|
||||
addLastTraffic("<font style='color:white'>Logged to HRD Logbook</font>");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
|
@ -2178,29 +2208,27 @@ function finishSendingReport(record, localMode)
|
|||
addLastTraffic("<font style='color:red'>Exception HamCQ Log</font>");
|
||||
}
|
||||
|
||||
if (
|
||||
logeQSLQSOCheckBox.checked == true &&
|
||||
nicknameeQSLCheckBox.checked == true &&
|
||||
eQSLNickname.value.trim().length > 0
|
||||
)
|
||||
if (logeQSLQSOCheckBox.checked == true && (nicknameeQSLCheckBox.checked == false || (nicknameeQSLCheckBox.checked == true && eQSLNickname.value.trim().length > 0)))
|
||||
{
|
||||
if (nicknameeQSLCheckBox.checked == true)
|
||||
{
|
||||
record.APP_EQSL_QTH_NICKNAME = eQSLNickname.value.trim();
|
||||
report = "";
|
||||
}
|
||||
let eQSLreport = "";
|
||||
for (var key in record)
|
||||
{
|
||||
report +=
|
||||
"<" + key + ":" + Buffer.byteLength(record[key]) + ">" + record[key] + " ";
|
||||
}
|
||||
report += "<EOR>";
|
||||
eQSLreport += "<" + key + ":" + Buffer.byteLength(record[key]) + ">" + record[key] + " ";
|
||||
}
|
||||
eQSLreport += "<EOR>";
|
||||
|
||||
try
|
||||
{
|
||||
sendeQSLEntry(report);
|
||||
sendeQSLEntry(eQSLreport);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
addLastTraffic("<font style='color:red'>Exception LoTW Log</font>");
|
||||
addLastTraffic("<font style='color:red'>Exception eQSL Log</font>");
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
|
@ -2321,8 +2349,6 @@ function sendeQSLEntry(report)
|
|||
{
|
||||
if (GT.mapSettings.offlineMode == true) return;
|
||||
|
||||
if (logeQSLQSOCheckBox.checked == true)
|
||||
{
|
||||
var pid = "GridTracker";
|
||||
var pver = String(gtVersion);
|
||||
var header = "<PROGRAMID:" + pid.length + ">" + pid + "\r\n";
|
||||
|
@ -2336,9 +2362,9 @@ function sendeQSLEntry(report)
|
|||
encodeURIComponent(eQSLUser.value) +
|
||||
"&EQSL_PSWD=" +
|
||||
encodeURIComponent(eQSLPassword.value);
|
||||
|
||||
getABuffer(fUrl, eqslCallback, false, "https", 443);
|
||||
}
|
||||
}
|
||||
|
||||
function testTrustedQSL(test)
|
||||
{
|
||||
|
|
|
@ -779,18 +779,6 @@ function lookupUsCallsign(object, writeState = false)
|
|||
}
|
||||
}
|
||||
object.zipcode = String(results.rows[0].zip);
|
||||
if (object.cnty == null)
|
||||
{
|
||||
let request = GT.Idb.transaction(["lookups"], "readwrite").objectStore("lookups").get(object.DEcall);
|
||||
request.onsuccess = function (event)
|
||||
{
|
||||
let save = false;
|
||||
if (request.result && object.cnty == null)
|
||||
{
|
||||
object.cnty = request.result.cnty;
|
||||
object.qual = true;
|
||||
save = true;
|
||||
}
|
||||
if (object.cnty == null && object.zipcode in GT.zipToCounty)
|
||||
{
|
||||
var counties = GT.zipToCounty[object.zipcode];
|
||||
|
@ -804,12 +792,11 @@ function lookupUsCallsign(object, writeState = false)
|
|||
}
|
||||
object.cnty = counties[0];
|
||||
save = true;
|
||||
}
|
||||
if (writeState && save)
|
||||
|
||||
if (writeState)
|
||||
{
|
||||
refreshQSOs();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -100,7 +100,8 @@ var def_appSettings = {
|
|||
workingCallsigns: {},
|
||||
workingDateEnable: false,
|
||||
workingDate: 0,
|
||||
qsoItemsPerPage: 100
|
||||
qsoItemsPerPage: 100,
|
||||
qslAuthority: "L"
|
||||
};
|
||||
|
||||
var def_mapSettings = {
|
||||
|
@ -296,6 +297,7 @@ var def_qso = {
|
|||
band: "",
|
||||
cnty: null,
|
||||
confirmed: false,
|
||||
confSrcs: {},
|
||||
cont: null,
|
||||
cqz: "",
|
||||
DEcall: "",
|
||||
|
|
|
@ -543,7 +543,9 @@ GT.NWappData = "";
|
|||
GT.screenshotDir = "";
|
||||
GT.scriptDir = "";
|
||||
GT.qsoLogFile = "";
|
||||
GT.clublogLogFile = "";
|
||||
GT.LoTWLogFile = "";
|
||||
GT.QrzLogFile = "";
|
||||
GT.userMediaDir = "";
|
||||
GT.gtMediaDir = path.resolve("./media");
|
||||
GT.localeString = navigator.language;
|
||||
|
@ -1290,6 +1292,10 @@ function processQSOs()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
qsoCountStyle.className = "roundBorderValue";
|
||||
qslCountStyle.className = "roundBorderValue";
|
||||
|
||||
updateRosterWorked();
|
||||
goProcessRoster();
|
||||
redrawGrids();
|
||||
|
@ -1336,7 +1342,8 @@ function addQSO(
|
|||
finalPhone = false,
|
||||
finalIOTA = "",
|
||||
finalSatName = "",
|
||||
finalPOTA = null
|
||||
finalPOTA = null,
|
||||
confSource = null
|
||||
)
|
||||
{
|
||||
let hash = "";
|
||||
|
@ -1352,6 +1359,7 @@ function addQSO(
|
|||
if (hash in GT.QSOhash)
|
||||
{
|
||||
details = GT.QSOhash[hash];
|
||||
let canWrite = (details.confirmed == false || GT.appSettings.qslAuthority == "0" || GT.appSettings.qslAuthority == confSource || !(GT.appSettings.qslAuthority in details.confSrcs));
|
||||
if (finalGrid.length > 0 && finalGrid != details.grid)
|
||||
{
|
||||
// only touch the grid if it's larger than the last grid && the 4wide is the same
|
||||
|
@ -1359,7 +1367,7 @@ function addQSO(
|
|||
{
|
||||
details.grid = finalGrid;
|
||||
}
|
||||
else if (details.grid.length != 0 && confirmed == true)
|
||||
else if (details.grid.length != 0 && confirmed == true && canWrite)
|
||||
{
|
||||
details.grid = finalGrid;
|
||||
}
|
||||
|
@ -1369,16 +1377,15 @@ function addQSO(
|
|||
if (finalRSTrecv.length > 0) details.RSTrecv = finalRSTrecv;
|
||||
if (finalCqZone.length > 0) details.cqz = finalCqZone;
|
||||
if (finalItuZone.length > 0) details.ituz = finalItuZone;
|
||||
if (details.state != null && finalState != null && details.state != finalState && confirmed == true)
|
||||
if (details.state != null && finalState != null && details.state != finalState && confirmed == true && canWrite)
|
||||
{
|
||||
details.state = finalState;
|
||||
}
|
||||
else if (details.state == null && finalState != null) details.state = finalState;
|
||||
if (finalDxcc < 1 && details.dxcc > 0) finalDxcc = details.dxcc;
|
||||
if (finalCont == null && details.cont) finalCont = details.cont;
|
||||
if (details.cnty != null && finalCnty != null && details.cnty != finalCnty && confirmed == true)
|
||||
if (details.cnty != null && finalCnty != null && details.cnty != finalCnty && confirmed == true && canWrite)
|
||||
{
|
||||
details.qual = true;
|
||||
details.cnty = finalCnty;
|
||||
}
|
||||
else if (details.cnty == null && details.cnty != null) details.cnty = finalCnty;
|
||||
|
@ -1388,6 +1395,10 @@ function addQSO(
|
|||
if (finalSatName.length > 0) details.satName = finalSatName;
|
||||
if (finalPOTA) details.pota = finalPOTA;
|
||||
details.confirmed |= confirmed;
|
||||
if (confirmed == true)
|
||||
{
|
||||
details.confSrcs[confSource] = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1420,6 +1431,11 @@ function addQSO(
|
|||
details.pota = finalPOTA;
|
||||
details.worked = true;
|
||||
details.confirmed = confirmed;
|
||||
details.confSrcs = {};
|
||||
if (confirmed == true)
|
||||
{
|
||||
details.confSrcs[confSource] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (finalDxcc < 1) finalDxcc = callsignToDxcc(finalDXcall);
|
||||
|
@ -1445,7 +1461,7 @@ function addQSO(
|
|||
details.qual = true;
|
||||
}
|
||||
|
||||
if (isKnownCallsignUSplus(finalDxcc))
|
||||
if (confirmed == false && isKnownCallsignUSplus(finalDxcc))
|
||||
{
|
||||
if (details.state == null && fourGrid.length > 0)
|
||||
{
|
||||
|
@ -2571,6 +2587,30 @@ function updateRosterInstances()
|
|||
function changeLogbookPage()
|
||||
{
|
||||
qsoItemsPerPageTd.innerHTML = GT.appSettings.qsoItemsPerPage = parseInt(qsoItemsPerPageValue.value);
|
||||
saveAppSettings();
|
||||
}
|
||||
|
||||
GT.qslAuthorityTimer = null;
|
||||
// Called from GridTracher.html
|
||||
function qslAuthorityChanged()
|
||||
{
|
||||
if (GT.qslAuthorityTimer != null)
|
||||
{
|
||||
nodeTimers.clearTimeout(GT.qslAuthorityTimer);
|
||||
GT.qslAuthorityTimer = null;
|
||||
}
|
||||
|
||||
GT.appSettings.qslAuthority = qslAuthority.value;
|
||||
saveAppSettings();
|
||||
// we set the timer as calling directly will pause the input queue
|
||||
GT.qslAuthorityTimer = nodeTimers.setTimeout(reloadFromQslAuthorityChanged, 500);
|
||||
}
|
||||
|
||||
function reloadFromQslAuthorityChanged()
|
||||
{
|
||||
GT.qslAuthorityTimer = null;
|
||||
clearQSOs(false); // do not clear what's on disk!
|
||||
startupAdifLoadCheck();
|
||||
}
|
||||
|
||||
function updateLogbook()
|
||||
|
@ -4901,7 +4941,7 @@ function clearAndLoadQSOs()
|
|||
startupAdifLoadCheck();
|
||||
}
|
||||
|
||||
function clearQSOs()
|
||||
function clearQSOs(clearFiles = true)
|
||||
{
|
||||
initQSOdata();
|
||||
GT.QSOhash = {};
|
||||
|
@ -4913,8 +4953,11 @@ function clearQSOs()
|
|||
updateLogbook();
|
||||
updateRosterWorked();
|
||||
goProcessRoster();
|
||||
if (clearFiles == true)
|
||||
{
|
||||
clearLogFilesAndCounts();
|
||||
}
|
||||
}
|
||||
|
||||
function clearLogFilesAndCounts()
|
||||
{
|
||||
|
@ -7369,7 +7412,7 @@ function showCallsignBox(redraw)
|
|||
"<th>" + $.i18n("gt.callsignBox.ITU") + "</th>" +
|
||||
"<th>" + $.i18n("gt.callsignBox.Flag") + "</th>" +
|
||||
"<th align=left>" + $.i18n("gt.callsignBox.QSO") + "</th>" +
|
||||
"<th>" + $.i18n("gt.callsignBox.Grid") + "</th>" +
|
||||
"<th>" + $.i18n("gt.callsignBox.QSL") + "</th>" +
|
||||
"<th>" + $.i18n("gt.callsignBox.When") + "</th>"; // <th>ITUz</th><th>CQz</th><th>ISO</th>";
|
||||
if (GT.callsignLookups.lotwUseEnable == true) worker += "<th>" + $.i18n("gt.callsignBox.LoTW") + "</th>";
|
||||
if (GT.callsignLookups.eqslUseEnable == true) worker += "<th>" + $.i18n("gt.callsignBox.eQSL") + "</th>";
|
||||
|
@ -7727,7 +7770,7 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
var bands = {};
|
||||
var modes = {};
|
||||
var dxccs = {};
|
||||
|
||||
var confSrcs = {};
|
||||
var ObjectCount = 0;
|
||||
|
||||
myObjects = GT.QSOhash;
|
||||
|
@ -7792,6 +7835,10 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
var pp = list[key].dxcc in GT.dxccInfo ? GT.dxccInfo[list[key].dxcc].pp : "?";
|
||||
|
||||
dxccs[GT.dxccToAltName[list[key].dxcc] + " (" + pp + ")"] = list[key].dxcc;
|
||||
if (list[key].confirmed)
|
||||
{
|
||||
confSrcs = Object.assign(confSrcs, list[key].confSrcs);
|
||||
}
|
||||
}
|
||||
|
||||
if (GT.filterBand != "Mixed")
|
||||
|
@ -7831,8 +7878,19 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
if (GT.filterQSL != "All")
|
||||
{
|
||||
list = list.filter(function (value)
|
||||
{
|
||||
if (GT.filterQSL == "false" || GT.filterQSL == "true")
|
||||
{
|
||||
return value.confirmed == (GT.filterQSL == "true");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value.confirmed && GT.filterQSL in value.confSrcs)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -7969,14 +8027,23 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
worker += "</tr>";
|
||||
|
||||
var key = null;
|
||||
var confTitle = "";
|
||||
var confTd = "";
|
||||
for (var i = startIndex; i < endIndex; i++)
|
||||
{
|
||||
key = list[i];
|
||||
if (confirmed)
|
||||
{
|
||||
let srcs = {};
|
||||
Object.keys(key.confSrcs).forEach(src => { srcs[GT.confSrcNames[src]] = true; });
|
||||
confTd = Object.keys(key.confSrcs).join("");
|
||||
confTitle = "title='" + Object.keys(srcs).join(", ") + "'";
|
||||
}
|
||||
worker += "<tr align=left><td style='color:#ff0;cursor:pointer' onclick='window.opener.startLookup(\"" + key.DEcall + "\",\"" + key.grid + "\");' >" + formatCallsign(key.DEcall) + "</td>";
|
||||
worker += "<td style='color:cyan;'>" + key.grid + (key.vucc_grids.length ? ", " + key.vucc_grids.join(", ") : "") + "</td>";
|
||||
worker += "<td style='color:lightgreen'>" + key.band + "</td>";
|
||||
worker += "<td style='color:lightblue'>" + key.mode + "</td>";
|
||||
worker += "<td align=center>" + (key.confirmed ? "✔" : "") + "</td>";
|
||||
worker += "<td align=left " + confTitle + ">" + confTd + "</td>";
|
||||
worker += "<td>" + key.RSTsent + "</td>";
|
||||
worker += "<td>" + key.RSTrecv + "</td>";
|
||||
worker += "<td style='color:orange'>" + GT.dxccToAltName[key.dxcc] + " <font color='lightgreen'>(" + (key.dxcc in GT.dxccInfo ? GT.dxccInfo[key.dxcc].pp : "?") + ")</font></td>";
|
||||
|
@ -8112,6 +8179,15 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
option.text = "No";
|
||||
newSelect.appendChild(option);
|
||||
|
||||
Object.keys(confSrcs)
|
||||
.forEach(function (key)
|
||||
{
|
||||
var option = document.createElement("option");
|
||||
option.value = key
|
||||
option.text = GT.confSrcNames[key];
|
||||
newSelect.appendChild(option);
|
||||
});
|
||||
|
||||
statsAppendChild(
|
||||
"qslFilterDiv",
|
||||
newSelect,
|
||||
|
@ -12896,6 +12972,7 @@ function setMsgSettingsView()
|
|||
|
||||
function loadAdifSettings()
|
||||
{
|
||||
qslAuthority.value = GT.appSettings.qslAuthority;
|
||||
qsoItemsPerPageTd.innerHTML = qsoItemsPerPageValue.value = GT.appSettings.qsoItemsPerPage;
|
||||
|
||||
workingCallsignEnable.checked = GT.appSettings.workingCallsignEnable;
|
||||
|
@ -14369,13 +14446,7 @@ function addLookupObjectToIndexedDB(lookupObject)
|
|||
};
|
||||
}
|
||||
|
||||
function getLookupCachedObject(
|
||||
call,
|
||||
gridPass,
|
||||
resultFunction = null,
|
||||
noResultFunction = null,
|
||||
callObject = null
|
||||
)
|
||||
function getLookupCachedObject(call, gridPass, resultFunction = null, noResultFunction = null, callObject = null)
|
||||
{
|
||||
var request = GT.Idb
|
||||
.transaction(["lookups"], "readwrite")
|
||||
|
@ -14384,10 +14455,7 @@ function getLookupCachedObject(
|
|||
|
||||
request.onsuccess = function (event)
|
||||
{
|
||||
if (
|
||||
request.result &&
|
||||
parseInt(request.result.cached) + 604800 > timeNowSec()
|
||||
)
|
||||
if (request.result && parseInt(request.result.cached) + 604800 > timeNowSec())
|
||||
{
|
||||
// 7 days, should an option Tag! I know right?!
|
||||
delete request.result;
|
||||
|
@ -15244,6 +15312,8 @@ function mediaCheck()
|
|||
|
||||
GT.qsoLogFile = path.join(GT.appData, "GridTracker_QSO.adif");
|
||||
GT.LoTWLogFile = path.join(GT.appData, "LogbookOfTheWorld.adif");
|
||||
GT.QrzLogFile = path.join(GT.appData, "qrz.adif");
|
||||
GT.clublogLogFile = path.join(GT.appData, "clublog.adif");
|
||||
|
||||
logEventMedia.appendChild(newOption("none", "None"));
|
||||
msgAlertMedia.appendChild(newOption("none", "Select File"));
|
||||
|
@ -15303,7 +15373,7 @@ function mediaCheck()
|
|||
try
|
||||
{
|
||||
let fileExists = fs.existsSync(GT.NWappData + "internal_qso.json");
|
||||
if (fileExists == true && GT.startVersion > 1231202)
|
||||
if (fileExists == true && GT.startVersion > 1231207)
|
||||
{
|
||||
var data = JSON.parse(fs.readFileSync(GT.NWappData + "internal_qso.json"));
|
||||
GT.tracker = data.tracker;
|
||||
|
|
|
@ -11,6 +11,7 @@ CR.blockedCalls = {};
|
|||
CR.blockedCQ = {};
|
||||
CR.ignoredCQ = {};
|
||||
CR.blockedDxcc = {};
|
||||
CR.blockedGrid = {};
|
||||
CR.blockedCQz = {};
|
||||
CR.blockedITUz = {};
|
||||
CR.scriptReport = {};
|
||||
|
@ -39,6 +40,7 @@ CR.targetHash = "";
|
|||
CR.dxccMenu = null;
|
||||
CR.targetDxcc = -1;
|
||||
CR.CQMenu = null;
|
||||
CR.GridMenu = null;
|
||||
CR.MsgMenu = null;
|
||||
CR.targetCQ = "";
|
||||
CR.timerInterval = null;
|
||||
|
@ -211,11 +213,17 @@ if (typeof localStorage.blockedITUz == "undefined")
|
|||
localStorage.blockedITUz = "{}";
|
||||
}
|
||||
|
||||
if (typeof localStorage.blockedGrid == "undefined")
|
||||
{
|
||||
localStorage.blockedGrid = "{}";
|
||||
}
|
||||
|
||||
if (typeof localStorage.blockedCalls != "undefined")
|
||||
{
|
||||
CR.blockedCalls = JSON.parse(localStorage.blockedCalls);
|
||||
CR.blockedCQ = JSON.parse(localStorage.blockedCQ);
|
||||
CR.blockedDxcc = JSON.parse(localStorage.blockedDxcc);
|
||||
CR.blockedGrid = JSON.parse(localStorage.blockedGrid);
|
||||
CR.blockedCQz = JSON.parse(localStorage.blockedCQz);
|
||||
CR.blockedITUz = JSON.parse(localStorage.blockedITUz);
|
||||
}
|
||||
|
@ -223,6 +231,7 @@ else
|
|||
{
|
||||
localStorage.blockedCalls = "{}";
|
||||
localStorage.blockedDxcc = "{}";
|
||||
localStorage.blockedGrid = "{}";
|
||||
localStorage.blockedCQz = "{}";
|
||||
localStorage.blockedITUz = "{}";
|
||||
localStorage.ignoredCQ = "{}";
|
||||
|
@ -263,6 +272,7 @@ function storeBlocks(render = true)
|
|||
localStorage.blockedCalls = JSON.stringify(CR.blockedCalls);
|
||||
localStorage.ignoredCQ = JSON.stringify(CR.ignoredCQ);
|
||||
localStorage.blockedDxcc = JSON.stringify(CR.blockedDxcc);
|
||||
localStorage.blockedGrid = JSON.stringify(CR.blockedGrid);
|
||||
localStorage.blockedCQz = JSON.stringify(CR.blockedCQz);
|
||||
localStorage.blockedITUz = JSON.stringify(CR.blockedITUz);
|
||||
if (render)
|
||||
|
@ -1307,6 +1317,7 @@ function initSelectors()
|
|||
|
||||
CR.ignoreTypeInputs = {};
|
||||
CR.ignoreTypeInputs.Callsign = ignoreCallsignValue;
|
||||
CR.ignoreTypeInputs.Grid = ignoreGridValue;
|
||||
CR.ignoreTypeInputs.CQ = ignoreCqDiv;
|
||||
CR.ignoreTypeInputs.DXCC = ignoreDxccSelect;
|
||||
CR.ignoreTypeInputs.CQz = ignoreCqzSelect;
|
||||
|
@ -1319,6 +1330,7 @@ function initSelectors()
|
|||
function hideIgnoreElements()
|
||||
{
|
||||
ignoreCallsignValue.style.display = "none";
|
||||
ignoreGridValue.style.display = "none";
|
||||
ignoreCqDiv.style.display = "none";
|
||||
ignoreDxccSelect.style.display = "none";
|
||||
ignoreCqzSelect.style.display = "none";
|
||||
|
@ -1337,9 +1349,25 @@ function ignoreTypeChanged(ignoreTypeValue)
|
|||
CR.ignoreType = ignoreTypeValue;
|
||||
}
|
||||
ValidateTextInput(ignoreCallsignValue);
|
||||
gridInputValidate(ignoreGridValue);
|
||||
ValidateTextInput(ignoreCqCallsignValue);
|
||||
}
|
||||
|
||||
function gridInputValidate(element)
|
||||
{
|
||||
element.value = element.value.toUpperCase().replace(/[^A-Z0-9/]+/g, "").substr(0, 4);
|
||||
if (!element.value.match(GRID_REGEXP))
|
||||
{
|
||||
element.style.color = "#000";
|
||||
element.style.backgroundColor = "yellow";
|
||||
}
|
||||
else
|
||||
{
|
||||
element.style.color = "";
|
||||
element.style.backgroundColor = "";
|
||||
}
|
||||
}
|
||||
|
||||
function addNewIgnore()
|
||||
{
|
||||
if (CR.ignoreType == "Callsign")
|
||||
|
@ -1360,6 +1388,10 @@ function addNewIgnore()
|
|||
{
|
||||
ignoreDxcc(ignoreDxccSelect.value);
|
||||
}
|
||||
else if (CR.ignoreType == "Grid")
|
||||
{
|
||||
ignoreGrid(ignoreGridValue.value);
|
||||
}
|
||||
else if (CR.ignoreType == "CQz")
|
||||
{
|
||||
ignoreCQz(ignoreCqzSelect.value)
|
||||
|
@ -1429,6 +1461,13 @@ function ignoreDxcc(dxcc)
|
|||
viewRoster();
|
||||
}
|
||||
|
||||
function ignoreGrid(grid)
|
||||
{
|
||||
CR.blockedGrid[grid] = true;
|
||||
storeBlocks();
|
||||
viewRoster();
|
||||
}
|
||||
|
||||
function ignoreCQ(cq, dxcc)
|
||||
{
|
||||
if (dxcc > 0)
|
||||
|
@ -1465,6 +1504,13 @@ function deleteDxccIgnore(key)
|
|||
viewRoster();
|
||||
}
|
||||
|
||||
function deleteGridIgnore(key)
|
||||
{
|
||||
delete CR.blockedGrid[key];
|
||||
storeBlocks();
|
||||
viewRoster();
|
||||
}
|
||||
|
||||
function deleteCQIgnore(key)
|
||||
{
|
||||
delete CR.ignoredCQ[key];
|
||||
|
@ -1500,6 +1546,13 @@ function clearAllDxccIgnores()
|
|||
viewRoster();
|
||||
}
|
||||
|
||||
function clearAllGridIgnores()
|
||||
{
|
||||
CR.blockedGrid = Object();
|
||||
storeBlocks();
|
||||
viewRoster();
|
||||
}
|
||||
|
||||
function clearAllCQIgnores()
|
||||
{
|
||||
CR.ignoredCQ = Object();
|
||||
|
@ -1585,7 +1638,7 @@ function renderIgnoresTab()
|
|||
let key = split[0];
|
||||
let dxcc = -1;
|
||||
if (split.length == 2) dxcc = parseInt(split[1]);
|
||||
worker += "<tr><td align=left style='color:cyan;' >" + key + " from " + (dxcc == -1 ? "All" : window.opener.GT.dxccToAltName[dxcc]) + "</td><td style='cursor:pointer;' onclick='deleteCQIgnore(\"" + rawKey + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
|
||||
worker += "<tr><td align=left style='color:lightgreen;' >" + key + " from " + (dxcc == -1 ? "All" : window.opener.GT.dxccToAltName[dxcc]) + "</td><td style='cursor:pointer;' onclick='deleteCQIgnore(\"" + rawKey + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
|
||||
});
|
||||
worker += "</table></div>";
|
||||
}
|
||||
|
@ -1603,6 +1656,19 @@ function renderIgnoresTab()
|
|||
worker += "</table></div>";
|
||||
}
|
||||
|
||||
if (Object.keys(CR.blockedGrid).length > 0)
|
||||
{
|
||||
clearString = "<th style='cursor:pointer;' onclick='clearAllGridIgnores()'>Clear All</th>";
|
||||
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>Grid</th>" + clearString + "</tr>";
|
||||
Object.keys(CR.blockedGrid)
|
||||
.sort()
|
||||
.forEach(function (key, i)
|
||||
{
|
||||
worker += "<tr><td align=left style='color:cyan' >" + key + "</td><td style='cursor:pointer;' onclick='deleteGridIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
|
||||
});
|
||||
worker += "</table></div>";
|
||||
}
|
||||
|
||||
if (Object.keys(CR.blockedCQz).length > 0)
|
||||
{
|
||||
clearString = "<th style='cursor:pointer;' onclick='clearAllCQzIgnores()'>Clear All</th>";
|
||||
|
@ -2175,6 +2241,42 @@ function addControls()
|
|||
|
||||
CR.dxccMenu.append(item);
|
||||
|
||||
CR.GridMenu = new nw.Menu();
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: $.i18n("roster.add.watcher.label"),
|
||||
click: function ()
|
||||
{
|
||||
addWatcher(CR.callRoster[CR.targetHash].callObj.grid, "Grid");
|
||||
}
|
||||
});
|
||||
|
||||
CR.GridMenu.append(item);
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: "Ignore Grid",
|
||||
click: function ()
|
||||
{
|
||||
ignoreGrid(CR.callRoster[CR.targetHash].callObj.grid);
|
||||
}
|
||||
});
|
||||
|
||||
CR.GridMenu.append(item);
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: $.i18n("roster.menu.EditIgnores"),
|
||||
enabled: true,
|
||||
click: function ()
|
||||
{
|
||||
openIgnores();
|
||||
}
|
||||
});
|
||||
|
||||
CR.GridMenu.append(item);
|
||||
|
||||
callsignNeed.value = CR.rosterSettings.callsign;
|
||||
huntMode.value = CR.rosterSettings.hunting;
|
||||
huntNeed.value = CR.rosterSettings.huntNeed;
|
||||
|
@ -2358,6 +2460,14 @@ function handleContextMenu(ev)
|
|||
CR.targetHash = parent.id;
|
||||
CR.MsgMenu.popup(mouseX, mouseY);
|
||||
}
|
||||
else if (name == "Grid")
|
||||
{
|
||||
if (CR.callRoster[parent.id].callObj.grid.length == 4)
|
||||
{
|
||||
CR.targetHash = parent.id;
|
||||
CR.GridMenu.popup(mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
else if (name == "CQ")
|
||||
{
|
||||
if (CR.callRoster[parent.id].DXcall != "CQ")
|
||||
|
@ -3753,13 +3863,15 @@ function watcherTypeChanged(value)
|
|||
watcherType.value = value;
|
||||
if (value == "Callsign")
|
||||
{
|
||||
// fix i18n
|
||||
watcherTextTh.innerHTML = "Callsign";
|
||||
watcherTextTh.innerHTML = $.i18n("roster.controls.hunting.callsign");
|
||||
}
|
||||
if (value == "Calling")
|
||||
{
|
||||
// fix i18n
|
||||
watcherTextTh.innerHTML = "Calling";
|
||||
watcherTextTh.innerHTML = $.i18n("alerts.QRZ.speech");
|
||||
}
|
||||
if (value == "Grid")
|
||||
{
|
||||
watcherTextTh.innerHTML = $.i18n("roster.controls.hunting.grid");
|
||||
}
|
||||
if (value == "Message")
|
||||
{
|
||||
|
@ -3789,6 +3901,11 @@ function watcherOnText()
|
|||
testCallsign = true;
|
||||
watcherText.value = watcherText.value.toUpperCase().replace(/[^A-Z0-9/\s]+/g, "");
|
||||
}
|
||||
else if (watcherType.value == "Grid")
|
||||
{
|
||||
gridInputValidate(watcherText);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
testCallsign = true;
|
||||
|
|
|
@ -18,6 +18,8 @@ const CALLSIGN_REGEXP =
|
|||
for a optional list of postindicators separated by `\/` from the rest of the call
|
||||
*/
|
||||
|
||||
const GRID_REGEXP = /^[A-Z]{2}[0-9]{2}$/
|
||||
|
||||
function processRosterFiltering(callRoster, rosterSettings)
|
||||
{
|
||||
// First loop, exclude calls, mostly based on "Exceptions" settings
|
||||
|
@ -83,6 +85,11 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
if (callObj.grid in CR.blockedGrid)
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
if (CR.rosterSettings.cqOnly == true)
|
||||
{
|
||||
if (CR.rosterSettings.wantRRCQ == true)
|
||||
|
|
|
@ -57,7 +57,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
// If they are not ignored or we're in a QSO with them, let it through
|
||||
|
||||
// TODO: This is here because it's after the filtering stage
|
||||
if ((!(entry.DEcall in CR.blockedCalls) && !(callObj.dxcc in CR.blockedDxcc)) ||
|
||||
if ((!(entry.DEcall in CR.blockedCalls) && !(callObj.dxcc in CR.blockedDxcc) && !(callObj.grid in CR.blockedGrid)) ||
|
||||
window.opener.GT.instances[callObj.instance].status.DXcall == entry.DEcall)
|
||||
{
|
||||
entry.tx = true;
|
||||
|
@ -91,6 +91,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
callObj.DEcallHTML = null;
|
||||
callObj.DXcallHTML = null;
|
||||
callObj.msgHTML = null;
|
||||
callObj.gridHTML = null;
|
||||
|
||||
let colorObject = Object();
|
||||
|
||||
|
@ -833,6 +834,11 @@ function buildWatcher(watcher)
|
|||
watcher.source = "DXcall";
|
||||
watcher.html = "DXcallHTML";
|
||||
}
|
||||
else if (watcher.type == "Grid")
|
||||
{
|
||||
watcher.source = "grid";
|
||||
watcher.html = "gridHTML";
|
||||
}
|
||||
else
|
||||
{
|
||||
watcher.source = "msg";
|
||||
|
|
|
@ -102,7 +102,8 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
rawAttrs: callObj.style.grid,
|
||||
onClick: `centerOn("${callObj.grid}")`,
|
||||
html: (callObj.grid.length > 0 ? callObj.grid : " ")
|
||||
name: "Grid",
|
||||
html: (callObj.grid.length > 0 ? callObj.gridHTML || callObj.grid : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
|
|
@ -270,6 +270,26 @@ html, body {
|
|||
min-width: 20px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.QsoQslActive {
|
||||
background: linear-gradient(90deg, yellow, blue);
|
||||
background-size: 200% 200%;
|
||||
animation: AnimationQsoQsl 1s ease infinite;
|
||||
text-shadow: black 0 0 6px;
|
||||
}
|
||||
|
||||
@keyframes AnimationQsoQsl {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.roundBorderDEInfo {
|
||||
border: 1px solid white;
|
||||
-webkit-border-radius: 6px;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "GridTracker",
|
||||
"product_string_do_not_use": "gridtracker",
|
||||
"version": "1.23.1207",
|
||||
"version": "1.23.1217",
|
||||
"betaVersion": "",
|
||||
"description": "GridTracker: An Amateur Radio Companion",
|
||||
"author": "GridTracker.org",
|
||||
|
|
Ładowanie…
Reference in New Issue