Update safe settings

This commit is contained in:
Eugene Burmakin 2025-05-19 23:28:33 +02:00
parent 3cea7db88f
commit 8728a22974
3 changed files with 54 additions and 39 deletions

View file

@ -47,7 +47,7 @@ export default class extends BaseController {
this.clearFogRadius = parseInt(this.userSettings.fog_of_war_meters) || 50; this.clearFogRadius = parseInt(this.userSettings.fog_of_war_meters) || 50;
this.fogLinethreshold = parseInt(this.userSettings.fog_of_war_threshold) || 90; this.fogLinethreshold = parseInt(this.userSettings.fog_of_war_threshold) || 90;
this.routeOpacity = parseFloat(this.userSettings.route_opacity) || 0.6; this.routeOpacity = parseFloat(this.userSettings.route_opacity) || 0.6;
this.distanceUnit = this.userSettings.maps.distance_unit || "km"; this.distanceUnit = this.userSettings.distance_unit || "km";
this.pointsRenderingMode = this.userSettings.points_rendering_mode || "raw"; this.pointsRenderingMode = this.userSettings.points_rendering_mode || "raw";
this.liveMapEnabled = this.userSettings.live_map_enabled || false; this.liveMapEnabled = this.userSettings.live_map_enabled || false;
this.countryCodesMap = countryCodesMap(); this.countryCodesMap = countryCodesMap();

View file

@ -3,12 +3,30 @@
class Users::SafeSettings class Users::SafeSettings
attr_reader :settings attr_reader :settings
def initialize(settings) DEFAULT_VALUES = {
@settings = settings 'fog_of_war_meters' => 50,
'meters_between_routes' => 500,
'preferred_map_layer' => 'OpenStreetMap',
'speed_colored_routes' => false,
'points_rendering_mode' => 'raw',
'minutes_between_routes' => 30,
'time_threshold_minutes' => 30,
'merge_threshold_minutes' => 15,
'live_map_enabled' => true,
'route_opacity' => 0.6,
'immich_url' => nil,
'immich_api_key' => nil,
'photoprism_url' => nil,
'photoprism_api_key' => nil,
'maps' => { 'distance_unit' => 'km' }
}.freeze
def initialize(settings = {})
@settings = DEFAULT_VALUES.dup.merge(settings)
end end
# rubocop:disable Metrics/MethodLength # rubocop:disable Metrics/MethodLength
def config def default_settings
{ {
fog_of_war_meters: fog_of_war_meters, fog_of_war_meters: fog_of_war_meters,
meters_between_routes: meters_between_routes, meters_between_routes: meters_between_routes,
@ -31,45 +49,43 @@ class Users::SafeSettings
# rubocop:enable Metrics/MethodLength # rubocop:enable Metrics/MethodLength
def fog_of_war_meters def fog_of_war_meters
settings['fog_of_war_meters'] || 50 settings['fog_of_war_meters']
end end
def meters_between_routes def meters_between_routes
settings['meters_between_routes'] || 500 settings['meters_between_routes']
end end
def preferred_map_layer def preferred_map_layer
settings['preferred_map_layer'] || 'OpenStreetMap' settings['preferred_map_layer']
end end
def speed_colored_routes def speed_colored_routes
settings['speed_colored_routes'] || false settings['speed_colored_routes']
end end
def points_rendering_mode def points_rendering_mode
settings['points_rendering_mode'] || 'raw' settings['points_rendering_mode']
end end
def minutes_between_routes def minutes_between_routes
settings['minutes_between_routes'] || 30 settings['minutes_between_routes']
end end
def time_threshold_minutes def time_threshold_minutes
settings['time_threshold_minutes'] || 30 settings['time_threshold_minutes']
end end
def merge_threshold_minutes def merge_threshold_minutes
settings['merge_threshold_minutes'] || 15 settings['merge_threshold_minutes']
end end
def live_map_enabled def live_map_enabled
return settings['live_map_enabled'] if settings.key?('live_map_enabled') settings['live_map_enabled']
true
end end
def route_opacity def route_opacity
settings['route_opacity'] || 0.6 settings['route_opacity']
end end
def immich_url def immich_url
@ -89,10 +105,10 @@ class Users::SafeSettings
end end
def maps def maps
settings['maps'] || {} settings['maps']
end end
def distance_unit def distance_unit
settings.dig('maps', 'distance_unit') || 'km' settings.dig('maps', 'distance_unit')
end end
end end

View file

@ -1,13 +1,13 @@
# frozen_string_literal: true # frozen_string_literal: true
RSpec.describe Users::SafeSettings do RSpec.describe Users::SafeSettings do
describe '#config' do describe '#default_settings' do
context 'with default values' do context 'with default values' do
let(:settings) { {} } let(:settings) { {} }
let(:safe_settings) { described_class.new(settings) } let(:safe_settings) { described_class.new(settings) }
it 'returns default configuration' do it 'returns default configuration' do
expect(safe_settings.config).to eq( expect(safe_settings.default_settings).to eq(
{ {
fog_of_war_meters: 50, fog_of_war_meters: 50,
meters_between_routes: 500, meters_between_routes: 500,
@ -23,7 +23,7 @@ RSpec.describe Users::SafeSettings do
immich_api_key: nil, immich_api_key: nil,
photoprism_url: nil, photoprism_url: nil,
photoprism_api_key: nil, photoprism_api_key: nil,
maps: {}, maps: { "distance_unit" => "km" },
distance_unit: 'km' distance_unit: 'km'
} }
) )
@ -53,24 +53,23 @@ RSpec.describe Users::SafeSettings do
let(:safe_settings) { described_class.new(settings) } let(:safe_settings) { described_class.new(settings) }
it 'returns custom configuration' do it 'returns custom configuration' do
expect(safe_settings.config).to eq( expect(safe_settings.settings).to eq(
{ {
fog_of_war_meters: 100, "fog_of_war_meters" => 100,
meters_between_routes: 1000, "meters_between_routes" => 1000,
preferred_map_layer: 'Satellite', "preferred_map_layer" => "Satellite",
speed_colored_routes: true, "speed_colored_routes" => true,
points_rendering_mode: 'simplified', "points_rendering_mode" => "simplified",
minutes_between_routes: 60, "minutes_between_routes" => 60,
time_threshold_minutes: 45, "time_threshold_minutes" => 45,
merge_threshold_minutes: 20, "merge_threshold_minutes" => 20,
live_map_enabled: false, "live_map_enabled" => false,
route_opacity: 0.8, "route_opacity" => 0.8,
immich_url: 'https://immich.example.com', "immich_url" => "https://immich.example.com",
immich_api_key: 'immich-key', "immich_api_key" => "immich-key",
photoprism_url: 'https://photoprism.example.com', "photoprism_url" => "https://photoprism.example.com",
photoprism_api_key: 'photoprism-key', "photoprism_api_key" => "photoprism-key",
maps: { 'name' => 'custom', 'url' => 'https://custom.example.com' }, "maps" => { "name" => "custom", "url" => "https://custom.example.com" }
distance_unit: 'km'
} }
) )
end end
@ -98,7 +97,7 @@ RSpec.describe Users::SafeSettings do
expect(safe_settings.immich_api_key).to be_nil expect(safe_settings.immich_api_key).to be_nil
expect(safe_settings.photoprism_url).to be_nil expect(safe_settings.photoprism_url).to be_nil
expect(safe_settings.photoprism_api_key).to be_nil expect(safe_settings.photoprism_api_key).to be_nil
expect(safe_settings.maps).to eq({}) expect(safe_settings.maps).to eq({ "distance_unit" => "km" })
end end
end end