location-first scan: geolocation prompt decides the scan (8s fallback to plain scan, never blocks); server 'location upgrade' rule re-alerts with map link when coords arrive after a no-loc alert
This commit is contained in:
@@ -162,11 +162,13 @@ func (a *App) shouldAlert(ctx context.Context, tag db.Tag, scan db.Scan, hasLoc
|
||||
|
||||
// Within the window?
|
||||
if time.Since(last.ScannedAt.Time) < alertWindow {
|
||||
// Re-alert on movement >250 m, or a different finder phone.
|
||||
// Re-alert on movement >250 m, a different finder phone, or a location
|
||||
// upgrade (previous alert had no coords — send the map link).
|
||||
moved := hasLoc && last.Lat.Valid && last.Lng.Valid &&
|
||||
sms.HaversineMeters(last.Lat.Float64, last.Lng.Float64, *lat, *lng) > alertMinDistance
|
||||
locationUpgrade := hasLoc && !last.Lat.Valid
|
||||
differentPhone := phone != "" && phone != last.ScannerPhone.String
|
||||
return moved || differentPhone, ""
|
||||
return moved || locationUpgrade || differentPhone, ""
|
||||
}
|
||||
return true, ""
|
||||
}
|
||||
|
||||
@@ -142,12 +142,12 @@
|
||||
function () {
|
||||
sendScan(null, null); // no location — page still works, button stays
|
||||
},
|
||||
{timeout: 20000, maximumAge: 0}
|
||||
{timeout: 8000, maximumAge: 0}
|
||||
);
|
||||
}
|
||||
// Fire a scan immediately so a tag view always reports (and alerts) —
|
||||
// location is an upgrade, never a gate.
|
||||
sendScan(null, null);
|
||||
// Location-first: send coords when the finder approves. If the prompt is
|
||||
// denied, unsupported, or silently blocked (8s), fall back to a plain scan
|
||||
// so every tag view still reports.
|
||||
if (btn) btn.addEventListener("click", tryLocation);
|
||||
tryLocation();
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user