From ce363dfb59c3237e20aed87ab51da42b9652cb01 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 28 Sep 2024 02:44:03 +0200 Subject: [PATCH] Fix: note themes uses full URL now instead of Panoramax-id --- .../ImageProviders/ImageUploadManager.ts | 41 ++++++++----------- src/Logic/ImageProviders/ImageUploader.ts | 4 +- src/UI/Image/UploadImage.svelte | 23 +++++++++-- src/UI/SpecialVisualizations.ts | 5 +-- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index d726e10a2..c90e2ab07 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -1,4 +1,4 @@ -import { ImageUploader } from "./ImageUploader" +import { ImageUploader, UploadResult } from "./ImageUploader" import LinkImageAction from "../Osm/Actions/LinkImageAction" import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore" import { OsmId, OsmTags } from "../../Models/OsmFeature" @@ -111,44 +111,40 @@ export class ImageUploadManager { } const tags = tagsStore.data + const featureId = tags.id const author = this._osmConnection.userDetails.data.name - const action = await this.uploadImageWithLicense( + const uploadResult = await this.uploadImageWithLicense( featureId, author, file, targetKey, - tags?.data?.["_orig_theme"], ) + if (!uploadResult) { + return + } + const properties = this._featureProperties.getStore(featureId) + + const action = new LinkImageAction(featureId, uploadResult. key, uploadResult . value, properties, { + theme: tags?.data?.["_orig_theme"] ?? this._layout.id, + changeType: "add-image", + }) - if (!action) { - return - } - if (!isNaN(Number(featureId))) { - // This is a map note - const url = action._url - await this._osmConnection.addCommentToNote(featureId, url) - NoteCommentElement.addCommentTo(url, >tagsStore, { - osmConnection: this._osmConnection, - }) - return - } await this._changes.applyAction(action) } - private async uploadImageWithLicense( + public async uploadImageWithLicense( featureId: OsmId, author: string, blob: File, targetKey: string | undefined, - theme?: string, - ): Promise { + ): Promise { this.increaseCountFor(this._uploadStarted, featureId) - const properties = this._featureProperties.getStore(featureId) let key: string let value: string + let absoluteUrl: string let location: [number, number] = undefined if (this._gps.data) { location = [this._gps.data.longitude, this._gps.data.latitude] @@ -157,7 +153,6 @@ export class ImageUploadManager { const feature = this._indexedFeatures.featuresById.data.get(featureId) location = GeoOperations.centerpointCoordinates(feature) } - let absoluteUrl: string try { ;({ key, value, absoluteUrl } = await this._uploader.uploadImage(blob, location, author)) } catch (e) { @@ -179,10 +174,8 @@ export class ImageUploadManager { value = absoluteUrl } this.increaseCountFor(this._uploadFinished, featureId) - return new LinkImageAction(featureId, key, value, properties, { - theme: theme ?? this._layout.id, - changeType: "add-image", - }) + return {key, absoluteUrl, value} + } private getCounterFor(collection: Map>, key: string | "*") { diff --git a/src/Logic/ImageProviders/ImageUploader.ts b/src/Logic/ImageProviders/ImageUploader.ts index dc9babe20..bd49baa48 100644 --- a/src/Logic/ImageProviders/ImageUploader.ts +++ b/src/Logic/ImageProviders/ImageUploader.ts @@ -8,5 +8,7 @@ export interface ImageUploader { blob: File, currentGps: [number,number], author: string - ): Promise<{ key: string; value: string, absoluteUrl: string }> + ): Promise } + +export interface UploadResult{ key: string; value: string, absoluteUrl: string } diff --git a/src/UI/Image/UploadImage.svelte b/src/UI/Image/UploadImage.svelte index ab74d4b52..2b0f97c8a 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -14,11 +14,14 @@ import LoginButton from "../Base/LoginButton.svelte" import { Translation } from "../i18n/Translation" import Camera from "@babeard/svelte-heroicons/solid/Camera" + import LayerConfig from "../../Models/ThemeConfig/LayerConfig" + import NoteCommentElement from "../Popup/Notes/NoteCommentElement" export let state: SpecialVisualizationState export let tags: UIEventSource export let targetKey: string = undefined + export let layer: LayerConfig /** * Image to show in the button * NOT the image to upload! @@ -30,11 +33,9 @@ export let labelText: string = undefined const t = Translations.t.image - let licenseStore = state?.userRelatedState?.imageLicense ?? new ImmutableStore("CC0") - let errors = new UIEventSource([]) - function handleFiles(files: FileList) { + async function handleFiles(files: FileList) { const errs = [] for (let i = 0; i < files.length; i++) { const file = files.item(i) @@ -45,7 +46,21 @@ errs.push(canBeUploaded.error) continue } - state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey) + + if(layer.id === "note"){ + const uploadResult = await state?.imageUploadManager.uploadImageWithLicense(file, tags, targetKey) + if(!uploadResult){ + return + } + const url = uploadResult.absoluteUrl + await this._osmConnection.addCommentToNote(tags.data.id, url) + NoteCommentElement.addCommentTo(url, >tags, { + osmConnection: this._osmConnection, + }) + return + } + + await state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey) } catch (e) { alert(e) } diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts index cc5a88691..0f595186b 100644 --- a/src/UI/SpecialVisualizations.ts +++ b/src/UI/SpecialVisualizations.ts @@ -1100,11 +1100,10 @@ export default class SpecialVisualizations { ], needsUrls: [Imgur.apiUrl, ...Imgur.supportingUrls], - constr: (state, tags, args) => { + constr: (state, tags, args, feature, layer) => { const id = tags.data[args[0] ?? "id"] tags = state.featureProperties.getStore(id) - console.log("Id is", id) - return new SvelteUIElement(UploadImage, { state, tags }) + return new SvelteUIElement(UploadImage, { state, tags, layer }) }, }, {