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' && (