diff --git a/app/components/app-menu/settings.gjs b/app/components/app-menu/settings.gjs index 55673d4..50654b9 100644 --- a/app/components/app-menu/settings.gjs +++ b/app/components/app-menu/settings.gjs @@ -1,163 +1,25 @@ -import Component from '@glimmer/component'; import { on } from '@ember/modifier'; -import { service } from '@ember/service'; -import { action } from '@ember/object'; import Icon from '#components/icon'; -import eq from 'ember-truth-helpers/helpers/eq'; +import AppMenuSettingsMapUi from './settings/map-ui'; +import AppMenuSettingsApis from './settings/apis'; +import AppMenuSettingsNostr from './settings/nostr'; -export default class AppMenuSettings extends Component { - @service settings; + + + + + + Settings + + + + - @action - updateApi(event) { - this.settings.updateOverpassApi(event.target.value); - } - - @action - toggleKinetic(event) { - this.settings.updateMapKinetic(event.target.value === 'true'); - } - - @action - toggleQuickSearchButtons(event) { - this.settings.updateShowQuickSearchButtons(event.target.value === 'true'); - } - - @action - updatePhotonApi(event) { - this.settings.updatePhotonApi(event.target.value); - } - - - {{! template-lint-disable no-nested-interactive }} - - - - - Settings - - - - - - - - - - - Map & UI - - - - Quick search buttons visible - - - Yes - - - No - - - - - Map Inertia (Kinetic Panning) - - - On - - - Off - - - - - - - - - - API Providers - - - - Overpass API Provider - - {{#each this.settings.overpassApis as |api|}} - - {{api.name}} - - {{/each}} - - - - Photon API Provider - - {{#each this.settings.photonApis as |api|}} - - {{api.name}} - - {{/each}} - - - - - - - - - Nostr - - - {{! Nostr settings will go here }} - - - - - -} + + + + + + + + diff --git a/app/components/app-menu/settings/apis.gjs b/app/components/app-menu/settings/apis.gjs new file mode 100644 index 0000000..44a1cb5 --- /dev/null +++ b/app/components/app-menu/settings/apis.gjs @@ -0,0 +1,69 @@ +import Component from '@glimmer/component'; +import { on } from '@ember/modifier'; +import { service } from '@ember/service'; +import { action } from '@ember/object'; +import Icon from '#components/icon'; +import eq from 'ember-truth-helpers/helpers/eq'; + +export default class AppMenuSettingsApis extends Component { + @service settings; + + @action + updateApi(event) { + this.settings.updateOverpassApi(event.target.value); + } + + @action + updatePhotonApi(event) { + this.settings.updatePhotonApi(event.target.value); + } + + + {{! template-lint-disable no-nested-interactive }} + + + + API Providers + + + + Overpass API Provider + + {{#each this.settings.overpassApis as |api|}} + + {{api.name}} + + {{/each}} + + + + Photon API Provider + + {{#each this.settings.photonApis as |api|}} + + {{api.name}} + + {{/each}} + + + + + +} diff --git a/app/components/app-menu/settings/map-ui.gjs b/app/components/app-menu/settings/map-ui.gjs new file mode 100644 index 0000000..1435f5c --- /dev/null +++ b/app/components/app-menu/settings/map-ui.gjs @@ -0,0 +1,76 @@ +import Component from '@glimmer/component'; +import { on } from '@ember/modifier'; +import { service } from '@ember/service'; +import { action } from '@ember/object'; +import Icon from '#components/icon'; + +export default class AppMenuSettingsMapUi extends Component { + @service settings; + + @action + toggleKinetic(event) { + this.settings.updateMapKinetic(event.target.value === 'true'); + } + + @action + toggleQuickSearchButtons(event) { + this.settings.updateShowQuickSearchButtons(event.target.value === 'true'); + } + + + {{! template-lint-disable no-nested-interactive }} + + + + Map & UI + + + + Quick search buttons visible + + + Yes + + + No + + + + + Map Inertia (Kinetic Panning) + + + On + + + Off + + + + + + +} diff --git a/app/components/app-menu/settings/nostr.gjs b/app/components/app-menu/settings/nostr.gjs new file mode 100644 index 0000000..6cacd60 --- /dev/null +++ b/app/components/app-menu/settings/nostr.gjs @@ -0,0 +1,53 @@ +import Component from '@glimmer/component'; +import { on } from '@ember/modifier'; +import { service } from '@ember/service'; +import { action } from '@ember/object'; +import Icon from '#components/icon'; + +export default class AppMenuSettingsNostr extends Component { + @service settings; + + @action + togglePhotoFallbackUploads(event) { + this.settings.updateNostrPhotoFallbackUploads( + event.target.value === 'true' + ); + } + + + {{! template-lint-disable no-nested-interactive }} + + + + Nostr + + + + Upload photos to fallback + servers + + + Yes + + + No + + + + + + +} diff --git a/app/services/blossom.js b/app/services/blossom.js index 05b3648..4a189a0 100644 --- a/app/services/blossom.js +++ b/app/services/blossom.js @@ -21,10 +21,17 @@ function getBlossomUrl(serverUrl, path) { export default class BlossomService extends Service { @service nostrAuth; @service nostrData; + @service settings; get servers() { const servers = this.nostrData.blossomServers; - return servers.length ? servers : [DEFAULT_BLOSSOM_SERVER]; + const allServers = servers.length ? servers : [DEFAULT_BLOSSOM_SERVER]; + + if (!this.settings.nostrPhotoFallbackUploads) { + return [allServers[0]]; + } + + return allServers; } async _getAuthHeader(action, hash, serverUrl) { diff --git a/app/services/settings.js b/app/services/settings.js index e9e265e..7f6e668 100644 --- a/app/services/settings.js +++ b/app/services/settings.js @@ -6,6 +6,7 @@ export default class SettingsService extends Service { @tracked mapKinetic = true; @tracked photonApi = 'https://photon.komoot.io/api/'; @tracked showQuickSearchButtons = true; + @tracked nostrPhotoFallbackUploads = false; overpassApis = [ { @@ -64,6 +65,14 @@ export default class SettingsService extends Service { if (savedShowQuickSearch !== null) { this.showQuickSearchButtons = savedShowQuickSearch === 'true'; } + + const savedNostrPhotoFallbackUploads = localStorage.getItem( + 'marco:nostr-photo-fallback-uploads' + ); + if (savedNostrPhotoFallbackUploads !== null) { + this.nostrPhotoFallbackUploads = + savedNostrPhotoFallbackUploads === 'true'; + } } updateOverpassApi(url) { @@ -84,4 +93,9 @@ export default class SettingsService extends Service { updatePhotonApi(url) { this.photonApi = url; } + + updateNostrPhotoFallbackUploads(enabled) { + this.nostrPhotoFallbackUploads = enabled; + localStorage.setItem('marco:nostr-photo-fallback-uploads', String(enabled)); + } }