diff --git a/CHANGELOG.md b/CHANGELOG.md index c978a0746..6784f0169 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + ### [0.47.2](https://github.com/pietervdvn/mapcomplete/compare/v0.47.1...v0.47.2) (2024-09-24) @@ -62,6 +64,21 @@ All notable changes to this project will be documented in this file. See [standa * **waste:** add filter for 'recycling centre' ([5da63bf](https://github.com/pietervdvn/MapComplete/commit/5da63bf83aa7d8b230c8dbc082be3fba33344289)) +### [0.46.11](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.10...v0.46.11) (2024-09-28) + + +### Features + +* check if the image was blurred, attempt to reload if it is done; refactoring of ImageProvider code ([4650170](https://github.com/USERNAME/REPOSITORY_NAME/commits4650170db4bdd3b9e4fbd1900147a7433652dd6f)) + + +### Bug Fixes + +* fix tests with some refactoring ([0b992e7](https://github.com/USERNAME/REPOSITORY_NAME/commits0b992e75a481ffa5156f68d9a9fa3495a1fec4c9)) +* note themes uses full URL now instead of Panoramax-id ([ce363df](https://github.com/USERNAME/REPOSITORY_NAME/commitsce363dfb59c3237e20aed87ab51da42b9652cb01)) +* quickfixes to image upload flow ([ba1eb28](https://github.com/USERNAME/REPOSITORY_NAME/commitsba1eb28f274ac6cc6be4614456ca3d2137d9ba64)) + + ### [0.46.10](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.9...v0.46.10) (2024-09-26) diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index d726e10a2..0363f3b21 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" @@ -7,7 +7,6 @@ import { Store, UIEventSource } from "../UIEventSource" import { OsmConnection } from "../Osm/OsmConnection" import { Changes } from "../Osm/Changes" import Translations from "../../UI/i18n/Translations" -import NoteCommentElement from "../../UI/Popup/Notes/NoteCommentElement" import { Translation } from "../../UI/i18n/Translation" import { IndexedFeatureSource } from "../FeatureSource/FeatureSource" import { GeoOperations } from "../GeoOperations" @@ -111,44 +110,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( - featureId: OsmId, + public async uploadImageWithLicense( + featureId: string, 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 +152,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 +173,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..4495f025b 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -5,7 +5,7 @@ import type { SpecialVisualizationState } from "../SpecialVisualization" import { ImmutableStore, UIEventSource } from "../../Logic/UIEventSource" - import type { OsmTags } from "../../Models/OsmFeature" + import type { OsmId, OsmTags } from "../../Models/OsmFeature" import LoginToggle from "../Base/LoginToggle.svelte" import Translations from "../i18n/Translations" import Tr from "../Base/Tr.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,9 +46,26 @@ errs.push(canBeUploaded.error) continue } - state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey) + + if(layer?.id === "note"){ + const uploadResult = await state?.imageUploadManager.uploadImageWithLicense(tags.data.id, + state.osmConnection.userDetails.data?.name ?? "Anonymous", + file, "image") + if(!uploadResult){ + return + } + const url = uploadResult.absoluteUrl + await state.osmConnection.addCommentToNote(tags.data.id, url) + NoteCommentElement.addCommentTo(url, >tags, { + osmConnection: state.osmConnection, + }) + return + } + + await state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey) } catch (e) { - alert(e) + console.error(e) + state.reportError(e, "Could not upload image") } } errors.setData(errs) diff --git a/src/UI/SpecialVisualization.ts b/src/UI/SpecialVisualization.ts index d0f5b03d9..561a349cb 100644 --- a/src/UI/SpecialVisualization.ts +++ b/src/UI/SpecialVisualization.ts @@ -86,8 +86,8 @@ export interface SpecialVisualizationState { getMatchingLayer(properties: Record); showCurrentLocationOn(map: Store): ShowDataLayer + reportError(message: string | Error | XMLHttpRequest, extramessage?: string): Promise - reportError(message: string): Promise } export interface SpecialVisualization { diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts index 4077e30d8..be035b0ec 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 }) }, }, {