From d01ff6f7b739602cba33fc4c660f3dde0bdb7b2d Mon Sep 17 00:00:00 2001
From: Ninjasoturi <52629375+Ninjasoturi@users.noreply.github.com>
Date: Thu, 12 May 2022 20:02:35 +0300
Subject: [PATCH 1/3] Added distance unit selector In search box the distance
to a point is displayed in miles even though the unit says km. Instead of
fixing that to either of the units, I added `distanceUnit` in config so
admins can select which ever they prefer. I guess the most optimal would be
to have it possible for users to select their preferred unit but making that
happen was way beyond my skill level.
---
server/src/configs/default.json | 3 ++-
server/src/services/DbCheck.js | 9 +++++----
server/src/services/initialization.js | 3 +--
src/components/layout/dialogs/Search.jsx | 2 +-
4 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/server/src/configs/default.json b/server/src/configs/default.json
index b29635eeb..30eb5ad33 100644
--- a/server/src/configs/default.json
+++ b/server/src/configs/default.json
@@ -133,7 +133,8 @@
"noScanAreaOverlay": false,
"permImageDir": "images/perms",
"permArrayImages": false,
- "clientTimeoutMinutes": 30
+ "clientTimeoutMinutes": 30,
+ "distanceUnit" : "km"
},
"theme": {
"style": "dark",
diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js
index d362fe89a..5b25e2016 100644
--- a/server/src/services/DbCheck.js
+++ b/server/src/services/DbCheck.js
@@ -3,7 +3,7 @@ const knex = require('knex')
const { raw } = require('objection')
module.exports = class DbCheck {
- constructor(validModels, dbSettings, queryDebug, apiSettings) {
+ constructor(validModels, dbSettings, queryDebug, apiSettings, distanceUnit) {
this.validModels = validModels.flatMap(s => s.useFor)
this.singleModels = ['User', 'Badge', 'Session']
this.searchLimit = apiSettings.searchLimit
@@ -36,10 +36,11 @@ module.exports = class DbCheck {
},
})
})
+ this.distanceUnit = distanceUnit
}
- static getDistance(args, isMad) {
- return raw(`ROUND(( 3959 * acos( cos( radians(${args.lat}) ) * cos( radians( ${isMad ? 'latitude' : 'lat'} ) ) * cos( radians( ${isMad ? 'longitude' : 'lon'} ) - radians(${args.lon}) ) + sin( radians(${args.lat}) ) * sin( radians( ${isMad ? 'latitude' : 'lat'} ) ) ) ),2)`).as('distance')
+ static getDistance(args, isMad, distanceUnit) {
+ return raw(`ROUND(( ${(distanceUnit == 'mi') ? '3959' : '6371'} * acos( cos( radians(${args.lat}) ) * cos( radians( ${isMad ? 'latitude' : 'lat'} ) ) * cos( radians( ${isMad ? 'longitude' : 'lon'} ) - radians(${args.lon}) ) + sin( radians(${args.lat}) ) * sin( radians( ${isMad ? 'latitude' : 'lat'} ) ) ) ),2)`).as('distance')
}
async determineType() {
@@ -136,7 +137,7 @@ module.exports = class DbCheck {
async search(model, perms, args, method = 'search') {
const data = await Promise.all(this.models[model].map(async (source) => (
- source.SubModel[method](perms, args, source, DbCheck.getDistance(args, source.isMad))
+ source.SubModel[method](perms, args, source, DbCheck.getDistance(args, source.isMad, this.distanceUnit))
)))
const deDuped = DbCheck.deDupeResults(data).sort((a, b) => a.distance - b.distance)
if (deDuped.length > this.searchLimit) {
diff --git a/server/src/services/initialization.js b/server/src/services/initialization.js
index f80ce6b51..bc1166c8a 100644
--- a/server/src/services/initialization.js
+++ b/server/src/services/initialization.js
@@ -8,8 +8,7 @@ const staticMf = require('../data/masterfile.json')
const DbCheck = require('./DbCheck')
const EventManager = require('./EventManager')
const PvpWrapper = require('./PvpWrapper')
-
-const Db = new DbCheck(exampleSchemas, config.database, config.devOptions.queryDebug, config.api)
+const Db = new DbCheck(exampleSchemas, config.database, config.devOptions.queryDebug, config.api, config.map.distanceUnit)
const Pvp = config.api.pvp.reactMapHandlesPvp ? new PvpWrapper(config.api.pvp) : null
const Event = new EventManager(staticMf)
diff --git a/src/components/layout/dialogs/Search.jsx b/src/components/layout/dialogs/Search.jsx
index 1a0717e37..97d4222a0 100644
--- a/src/components/layout/dialogs/Search.jsx
+++ b/src/components/layout/dialogs/Search.jsx
@@ -192,7 +192,7 @@ export default function Search({
)}
- {option.distance}{t('km')}
+ {option.distance} {(map.distanceUnit == 'mi' ? t('mi') : t('km'))}
{safeSearch[searchTab] === 'quests' && (
From 39a6a79f977689fd126158d91e9cd8dd94acf0d8 Mon Sep 17 00:00:00 2001
From: Ninjasoturi
Date: Thu, 12 May 2022 17:09:27 +0000
Subject: [PATCH 2/3] Synced docker env vars with latest config
Files changed:\nM server/src/configs/custom-environment-variables.json
---
server/src/configs/custom-environment-variables.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json
index 16097fcc6..17a45b7a6 100644
--- a/server/src/configs/custom-environment-variables.json
+++ b/server/src/configs/custom-environment-variables.json
@@ -318,7 +318,8 @@
"clientTimeoutMinutes": {
"__name": "MAP_MISC_CLIENT_TIMEOUT_MINUTES",
"__format": "number"
- }
+ },
+ "distanceUnit": "MAP_MISC_DISTANCE_UNIT"
},
"theme": {
"style": "MAP_THEME_STYLE",
From 6bc3f8ccb2c4dca89191c9fb58c5dfa3f8ce69d7 Mon Sep 17 00:00:00 2001
From: Ninjasoturi <52629375+Ninjasoturi@users.noreply.github.com>
Date: Sat, 14 May 2022 19:18:23 +0300
Subject: [PATCH 3/3] Cosmetic fixes
---
server/src/services/DbCheck.js | 2 +-
src/components/layout/dialogs/Search.jsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js
index 5b25e2016..ddc46c125 100644
--- a/server/src/services/DbCheck.js
+++ b/server/src/services/DbCheck.js
@@ -40,7 +40,7 @@ module.exports = class DbCheck {
}
static getDistance(args, isMad, distanceUnit) {
- return raw(`ROUND(( ${(distanceUnit == 'mi') ? '3959' : '6371'} * acos( cos( radians(${args.lat}) ) * cos( radians( ${isMad ? 'latitude' : 'lat'} ) ) * cos( radians( ${isMad ? 'longitude' : 'lon'} ) - radians(${args.lon}) ) + sin( radians(${args.lat}) ) * sin( radians( ${isMad ? 'latitude' : 'lat'} ) ) ) ),2)`).as('distance')
+ return raw(`ROUND(( ${distanceUnit === 'mi' ? '3959' : '6371'} * acos( cos( radians(${args.lat}) ) * cos( radians( ${isMad ? 'latitude' : 'lat'} ) ) * cos( radians( ${isMad ? 'longitude' : 'lon'} ) - radians(${args.lon}) ) + sin( radians(${args.lat}) ) * sin( radians( ${isMad ? 'latitude' : 'lat'} ) ) ) ),2)`).as('distance')
}
async determineType() {
diff --git a/src/components/layout/dialogs/Search.jsx b/src/components/layout/dialogs/Search.jsx
index 97d4222a0..d52ceb0a8 100644
--- a/src/components/layout/dialogs/Search.jsx
+++ b/src/components/layout/dialogs/Search.jsx
@@ -192,7 +192,7 @@ export default function Search({
)}
- {option.distance} {(map.distanceUnit == 'mi' ? t('mi') : t('km'))}
+ {option.distance} {map.distanceUnit === 'mi' ? t('mi') : t('km')}
{safeSearch[searchTab] === 'quests' && (