|
|
|
@@ -1,78 +1,77 @@ |
|
|
|
//******************************************************************************
|
|
|
|
// transparent true/false
|
|
|
|
// ugc - garmin active captain
|
|
|
|
// layer - 0 Seachart, 1 Sonarchart
|
|
|
|
// du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms
|
|
|
|
// sd - safe depth
|
|
|
|
// sa ?
|
|
|
|
// LAYERS parameter: config_a_b_c
|
|
|
|
// a = 1 for depth in meters, 2 for depth in feet, 3 for fathoms
|
|
|
|
// b = 10.00: for 10.00 m safety depth (beginning of blue coloring) (unit equal to that set by a)
|
|
|
|
// c = 0 for pristine Navionics charts, 1 for Sonar Charts
|
|
|
|
//
|
|
|
|
// TRANSPARENT parameter:
|
|
|
|
// FALSE for non-layer
|
|
|
|
// TRUE for layer
|
|
|
|
//
|
|
|
|
// UGC parameter:
|
|
|
|
// FALSE for pristine Navionics charts
|
|
|
|
// TRUE for additinal user-generated content icons
|
|
|
|
//******************************************************************************
|
|
|
|
|
|
|
|
const
|
|
|
|
cReqParams = 'transparent=false&ugc=true&layer=1&du=1&sd=2&sa=false';
|
|
|
|
cReqParams = 'LAYERS=config_1_10.00_1&TRANSPARENT=FALSE&UGC=FALSE';
|
|
|
|
|
|
|
|
//******************************************************************************
|
|
|
|
|
|
|
|
const
|
|
|
|
cTTL = 10*60; // 10 Minutes
|
|
|
|
cTTL = 24*60*60; // 24 hour
|
|
|
|
cNavTokenKey = 'NavToken=';
|
|
|
|
cTimeStampKey = 'TimeStamp=';
|
|
|
|
|
|
|
|
function CheckTTL(const ATimeStamp: Integer): Boolean;
|
|
|
|
function CheckTTL(const ATimeStamp: AnsiString): Boolean;
|
|
|
|
begin
|
|
|
|
Result := (cTTL div 2) > GetUnixTime - ATimeStamp;
|
|
|
|
Result := ( (cTTL div 2) > GetUnixTime - StrToInt64Def(ATimeStamp, 0) );
|
|
|
|
end;
|
|
|
|
|
|
|
|
function GetNavToken: AnsiString;
|
|
|
|
var
|
|
|
|
VNavTokensJson: AnsiString;
|
|
|
|
VTimeStamp: Integer;
|
|
|
|
VNavToken: AnsiString;
|
|
|
|
VTimeStamp: AnsiString;
|
|
|
|
VResponseCode: Cardinal;
|
|
|
|
VResponseHeader, VResponseData: AnsiString;
|
|
|
|
VRequestUrl, VRequestHeader: AnsiString;
|
|
|
|
begin
|
|
|
|
Result := '';
|
|
|
|
|
|
|
|
Global.Lock;
|
|
|
|
try
|
|
|
|
if Global.Exists(0) and Global.Exists(1) then begin
|
|
|
|
VNavTokensJson := Global.GetVar(0);
|
|
|
|
VTimeStamp := Global.GetVar(1);
|
|
|
|
if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin
|
|
|
|
Result := VNavTokensJson;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
if (Result = '') and Assigned(Downloader) then begin
|
|
|
|
VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens';
|
|
|
|
VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/';
|
|
|
|
VResponseHeader := '';
|
|
|
|
VResponseData := '';
|
|
|
|
VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, '', VResponseHeader, VResponseData);
|
|
|
|
|
|
|
|
if VResponseCode = 200 then begin
|
|
|
|
Result := VResponseData;
|
|
|
|
Global.SetVar(0, Result);
|
|
|
|
Global.SetVar(1, GetUnixTime);
|
|
|
|
end;
|
|
|
|
if ScriptBuffer <> '' then begin
|
|
|
|
VNavToken := GetBetween(ScriptBuffer, cNavTokenKey, ';');
|
|
|
|
VTimeStamp := GetBetween(ScriptBuffer, cTimeStampKey, ';');
|
|
|
|
if (VNavToken <> '') and (VTimeStamp <> '') and CheckTTL(VTimeStamp) then begin
|
|
|
|
Result := VNavToken;
|
|
|
|
end else begin
|
|
|
|
ScriptBuffer := '';
|
|
|
|
end;
|
|
|
|
finally
|
|
|
|
Global.Unlock;
|
|
|
|
end;
|
|
|
|
|
|
|
|
if (Result = '') and Assigned(Downloader) then begin
|
|
|
|
VTimeStamp := IntToStr(GetUnixTime);
|
|
|
|
VRequestUrl := 'https://backend.navionics.com/tile/get_key/NAVIONICS_WEBAPP_P01/webapp.navionics.com?_=' + VTimeStamp + '123';
|
|
|
|
VRequestHeader := 'Origin: https://webapp.navionics.com' + #13#10 + 'Referer: https://webapp.navionics.com/';
|
|
|
|
VResponseHeader := '';
|
|
|
|
VResponseData := '';
|
|
|
|
VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, '', VResponseHeader, VResponseData);
|
|
|
|
|
|
|
|
if VResponseCode = 200 then begin
|
|
|
|
Result := VResponseData;
|
|
|
|
ScriptBuffer := cNavTokenKey + Result + ';' + cTimeStampKey + VTimeStamp + ';';
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
//******************************************************************************
|
|
|
|
|
|
|
|
var
|
|
|
|
VBuf : AnsiString;
|
|
|
|
VNavToken: AnsiString;
|
|
|
|
VNavBearer: AnsiString;
|
|
|
|
begin
|
|
|
|
VBuf := GetNavToken;
|
|
|
|
VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1);
|
|
|
|
VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1);
|
|
|
|
VNavToken := GetNavToken;
|
|
|
|
if VNavToken <> '' then begin
|
|
|
|
ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams;
|
|
|
|
RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 +
|
|
|
|
'Origin: https://maps.garmin.com' + #13#10 +
|
|
|
|
'Authorization: Bearer '+ VNavBearer;
|
|
|
|
ResultURL := GetURLBase + IntToStr(GetZ-1) + '/' + IntToStr(GetX) + '/' +
|
|
|
|
IntToStr(GetY) + '?' + cReqParams + '&' + 'navtoken=' + VNavToken;
|
|
|
|
end else begin
|
|
|
|
ResultURL := '';
|
|
|
|
end;
|
|
|
|
|