From 4d9b4abd19413e70eee30b345991a96a16712d9e Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Wed, 1 Jan 2020 20:29:58 -0700 Subject: [PATCH] Add geocode cache (close #30) --- www/assets/js/packages.js | 29 +++++++++++++++++++++++++++++ www/settings.js | 1 + 2 files changed, 30 insertions(+) diff --git a/www/assets/js/packages.js b/www/assets/js/packages.js index 35ab381..a38e162 100644 --- a/www/assets/js/packages.js +++ b/www/assets/js/packages.js @@ -290,6 +290,28 @@ function addPackageByAddress(number, street, citystate, type, callback) { var deadline = false; var ajaxlookup = function () { + var geocodecache = localStorage.getItem("geocode_cache"); + if (geocodecache == null) { + geocodecache = "{}"; + localStorage.setItem("geocode_cache", "{}"); + } + + geocodecache = JSON.parse(geocodecache); + var cachekey = number + " || " + street + " || " + citystate; + var cacheitem = geocodecache[cachekey]; + var timestamp = Math.floor(Date.now() / 1000); + if (typeof cacheitem != 'undefined') { + if (cacheitem.added + SETTINGS.geocodecacheexpiry < timestamp) { + console.log("Info", "Removing expired geocode cache item " + cachekey); + delete geocodecache[cachekey]; + localStorage.setItem("geocode_cache", JSON.stringify(geocodecache)); + } else { + console.log("Info", "Using cached geocode result", cacheitem); + addPackage(cacheitem.address, cacheitem.latitude, cacheitem.longitude, type, callback, deadline); + return; + } + } + $.ajax({ url: SETTINGS.geocodeapi, dataType: 'json', @@ -308,6 +330,13 @@ function addPackageByAddress(number, street, citystate, type, callback) { if (resp.status == "OK") { if (resp.accuracy.ok) { addPackage(resp.address.street, resp.coords[0], resp.coords[1], type, callback, deadline); + geocodecache[cachekey] = { + address: resp.address.street, + latitude: resp.coords[0], + longitude: resp.coords[1], + added: Math.floor(Date.now() / 1000) + }; + localStorage.setItem("geocode_cache", JSON.stringify(geocodecache)); } else { playSound("error"); app.dialog.confirm( diff --git a/www/settings.js b/www/settings.js index ee2ebe7..05c641b 100644 --- a/www/settings.js +++ b/www/settings.js @@ -301,6 +301,7 @@ var SETTINGS = { ] } ], + geocodecacheexpiry: 604800, // One week geocodeapi: "https://apis.netsyms.net/packagehelper/geocode.php", trackingapi: "https://apis.netsyms.net/packagehelper/track.php", weatherapi: "https://apis.netsyms.net/packagehelper/weather.php",