From e11a5ca17babd47163a83ff7b269fc8bb928c83b Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sat, 10 Jul 2021 13:47:53 +0200 Subject: [PATCH] Attempting to add in backend to the element --- Logic/Osm/Changes.ts | 50 ++++++++++++++++++++------------------ Logic/Osm/OsmConnection.ts | 4 +-- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/Logic/Osm/Changes.ts b/Logic/Osm/Changes.ts index 4a4b00d35..7ebf4df9b 100644 --- a/Logic/Osm/Changes.ts +++ b/Logic/Osm/Changes.ts @@ -6,31 +6,31 @@ import Constants from "../../Models/Constants"; import FeatureSource from "../FeatureSource/FeatureSource"; import {TagsFilter} from "../Tags/TagsFilter"; import {Tag} from "../Tags/Tag"; +import {OsmConnection} from "./OsmConnection"; /** * Handles all changes made to OSM. * Needs an authenticator via OsmConnection */ -export class Changes implements FeatureSource{ +export class Changes implements FeatureSource { - + + private static _nextId = -1; // Newly assigned ID's are negative public readonly name = "Newly added features" /** * The newly created points, as a FeatureSource */ - public features = new UIEventSource<{feature: any, freshness: Date}[]>([]); - - private static _nextId = -1; // Newly assigned ID's are negative + public features = new UIEventSource<{ feature: any, freshness: Date }[]>([]); /** * All the pending changes */ - public readonly pending: UIEventSource<{ elementId: string, key: string, value: string }[]> = - new UIEventSource<{elementId: string; key: string; value: string}[]>([]); + public readonly pending: UIEventSource<{ elementId: string, key: string, value: string }[]> = + new UIEventSource<{ elementId: string; key: string; value: string }[]>([]); /** * Adds a change to the pending changes */ - private static checkChange(kv: {k: string, v: string}): { k: string, v: string } { + private static checkChange(kv: { k: string, v: string }): { k: string, v: string } { const key = kv.k; const value = kv.v; if (key === undefined || key === null) { @@ -49,8 +49,7 @@ export class Changes implements FeatureSource{ return {k: key.trim(), v: value.trim()}; } - - + addTag(elementId: string, tagsFilter: TagsFilter, tags?: UIEventSource) { const eventSource = tags ?? State.state?.allElements.getEventSourceById(elementId); @@ -59,7 +58,7 @@ export class Changes implements FeatureSource{ if (changes.length == 0) { return; } - + for (const change of changes) { if (elementTags[change.k] !== change.v) { elementTags[change.k] = change.v; @@ -76,16 +75,17 @@ export class Changes implements FeatureSource{ * Uploads all the pending changes in one go. * Triggered by the 'PendingChangeUploader'-actor in Actors */ - public flushChanges(flushreason: string = undefined){ - if(this.pending.data.length === 0){ + public flushChanges(flushreason: string = undefined) { + if (this.pending.data.length === 0) { return; } - if(flushreason !== undefined){ + if (flushreason !== undefined) { console.log(flushreason) } this.uploadAll([], this.pending.data); this.pending.setData([]); } + /** * Create a new node element at the given lat/long. * An internal OsmObject is created to upload later on, a geojson represention is returned. @@ -118,33 +118,37 @@ export class Changes implements FeatureSource{ // The tags are not yet written into the OsmObject, but this is applied onto a const changes = []; for (const kv of basicTags) { - properties[kv.key] = kv.value; if (typeof kv.value !== "string") { throw "Invalid value: don't use a regex in a preset" } + properties[kv.key] = kv.value; changes.push({elementId: id, key: kv.key, value: kv.value}) } - + console.log("New feature added and pinged") - this.features.data.push({feature:geojson, freshness: new Date()}); + this.features.data.push({feature: geojson, freshness: new Date()}); this.features.ping(); - + State.state.allElements.addOrGetElement(geojson).ping(); - this.uploadAll([osmNode], changes); + if (State.state.osmConnection.userDetails.data.backend !== OsmConnection.oauth_configs.osm.url) { + properties["_backend"] = State.state.osmConnection.userDetails.data.backend + } + + // this.uploadAll([osmNode], changes); return geojson; } private uploadChangesWithLatestVersions( knownElements: OsmObject[], newElements: OsmObject[], pending: { elementId: string; key: string; value: string }[]) { const knownById = new Map(); - + knownElements.forEach(knownElement => { - console.log("Setting ",knownElement.type + knownElement.id, knownElement) + console.log("Setting ", knownElement.type + knownElement.id, knownElement) knownById.set(knownElement.type + "/" + knownElement.id, knownElement) }) - - + + // Here, inside the continuation, we know that all 'neededIds' are loaded in 'knownElements', which maps the ids onto the elements // We apply the changes on them for (const change of pending) { diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts index a3df9be9f..decc8a09c 100644 --- a/Logic/Osm/OsmConnection.ts +++ b/Logic/Osm/OsmConnection.ts @@ -30,7 +30,7 @@ export default class UserDetails { export class OsmConnection { - public static readonly _oauth_configs = { + public static readonly oauth_configs = { "osm": { oauth_consumer_key: 'hivV7ec2o49Two8g9h8Is1VIiVOgxQ1iYexCbvem', oauth_secret: 'wDBRTCem0vxD7txrg1y6p5r8nvmz8tAhET7zDASI', @@ -66,7 +66,7 @@ export class OsmConnection { osmConfiguration: "osm" | "osm-test" = 'osm' ) { this._singlePage = singlePage; - this._oauth_config = OsmConnection._oauth_configs[osmConfiguration] ?? OsmConnection._oauth_configs.osm; + this._oauth_config = OsmConnection.oauth_configs[osmConfiguration] ?? OsmConnection.oauth_configs.osm; console.debug("Using backend", this._oauth_config.url) OsmObject.SetBackendUrl(this._oauth_config.url + "/") this._iframeMode = Utils.runningFromConsole ? false : window !== window.top;