From 096ab5bebeade2f23ea2025217a695193639cbe2 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Wed, 31 Aug 2022 15:03:36 -0600 Subject: [PATCH] Prevent syncing package list between different versions, fix bug --- www/assets/js/packages.js | 57 +++++++++++++++++------------- www/assets/js/toolbox_sharelist.js | 18 ++++++++-- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/www/assets/js/packages.js b/www/assets/js/packages.js index da5a79b..73032ab 100644 --- a/www/assets/js/packages.js +++ b/www/assets/js/packages.js @@ -177,37 +177,44 @@ function addPackage(address, latitude, longitude, type, callback, deadline) { function importPackageList(newlist) { skipped = 0; let count = 0; - for (latlng in newlist) { - var latitude = newlist[latlng].coords[0]; - var longitude = newlist[latlng].coords[1]; - - latitude = +(parseFloat("" + latitude).toFixed(4)); - longitude = +(parseFloat("" + longitude).toFixed(4)); - - for (pkg in newlist[latlng].items) { - var added = false; - for (var i = 0; i < packages.length; i++) { - if (+(parseFloat("" + packages[i].coords[0]).toFixed(4)) == latitude && +(parseFloat("" + packages[i].coords[1]).toFixed(4)) == longitude) { - var newpackage = newlist[latlng].items[pkg]; - for (var j in packages[i].items) { - if (packages[i].items[j].id == newpackage.id) { - // This package already exists in the local database. + if (packages.length > 0) { + for (latlng in newlist) { + var latitude = newlist[latlng].coords[0]; + var longitude = newlist[latlng].coords[1]; + + latitude = +(parseFloat("" + latitude).toFixed(4)); + longitude = +(parseFloat("" + longitude).toFixed(4)); + + for (pkg in newlist[latlng].items) { + var added = false; + for (var i = 0; i < packages.length; i++) { + if (+(parseFloat("" + packages[i].coords[0]).toFixed(4)) == latitude && +(parseFloat("" + packages[i].coords[1]).toFixed(4)) == longitude) { + var newpackage = newlist[latlng].items[pkg]; + for (var j in packages[i].items) { + if (packages[i].items[j].id == newpackage.id) { + // This package already exists in the local database. + console.log("Skipping package ", newpackage); + added = true; + skipped++; + } + } + if (!added) { + packages[i].items.push(package); + count++; added = true; - skipped++; } + break; } - if (!added) { - packages[i].items.push(package); - count++; - added = true; - } - break; } - } - if (!added) { - packages.push(newlist[latlng]); + if (!added) { + packages.push(newlist[latlng]); + } } } + } else { + // internal list is empty, so just copy + packages = newlist; + skipped = -1; } setStorage("packages", JSON.stringify(packages)); diff --git a/www/assets/js/toolbox_sharelist.js b/www/assets/js/toolbox_sharelist.js index 93394b9..7cc9a21 100644 --- a/www/assets/js/toolbox_sharelist.js +++ b/www/assets/js/toolbox_sharelist.js @@ -17,7 +17,8 @@ function uploadList() { dataType: 'json', method: 'post', data: { - packages: JSON.stringify(packages) + packages: JSON.stringify(packages), + appversion: app_version }, timeout: 15 * 1000, success: function (resp) { @@ -69,12 +70,23 @@ function downloadItemList(code) { downloadlistdialogopen = false; } if (resp.status == "OK") { + if (typeof resp.appversion == "string") { + if (resp.appversion != app_version) { + app.dialog.alert("The sender is using " + app.name + " verson " + resp.appversion + " but you have " + app_version + ". Both devices must have the same version installed.", "Version Mismatch"); + return; + } + } else { + app.dialog.alert("The sender is using an old version of " + app.name + ". Both devices must have the same version installed.", "Version Mismatch"); + return; + } var skipped = importPackageList(resp.packages); if (skipped > 0) { app.dialog.alert("List imported and merged with the existing one. " + skipped + " items already existed locally and were skipped. Verify their delivery status manually.", "Import Complete"); + } else if (skipped == -1) { + app.dialog.alert("List imported.", "Import Complete"); } else { - app.dialog.alert("List imported and merged with the existing one.", "Import Complete"); - } + app.dialog.alert("List imported and merged with the existing one.", "Import Complete"); + } } else { app.dialog.alert(resp.message, "Error"); }