diff --git a/pages/workspace/create/file.vue b/pages/workspace/create/file.vue index 8b7d3a5..318b842 100644 --- a/pages/workspace/create/file.vue +++ b/pages/workspace/create/file.vue @@ -90,7 +90,8 @@ const complete = computed(() => && projectGroupId.value !== null && datasetType.value !== null && datasetFile.value instanceof File - && datasetFile.value.name.endsWith('.zip') + && (datasetFile.value.name.endsWith('.zip') + || datasetFile.value.name.endsWith('.xml')) ); function onFileChange(e) { diff --git a/services/import/file.ts b/services/import/file.ts index 4359774..1f2189c 100644 --- a/services/import/file.ts +++ b/services/import/file.ts @@ -4,6 +4,7 @@ import { OsmApiClient, OsmApiClientError, osm2osc } from '~/services/osm'; import { openTdeiPathwaysArchive, pathways2osc } from '~/services/pathways'; import { TdeiClient, TdeiClientError, TdeiConversionError } from '~/services/tdei'; import { WorkspacesClient, WorkspacesClientError } from '~/services/workspaces'; +import { isMimeXml } from '~/util/xml'; const status = { idle: 'Idle', @@ -62,7 +63,7 @@ export class FileImporter { } async _run(data: Blob, workspace): Promise { - if (workspace.type === 'osw') { + if (workspace.type === 'osw' && !isMimeXml(data.type)) { this._context.status = status.convertOsm; data = await this._tdeiClient.convertDataset(data, 'osw', 'osm', workspace.tdeiProjectGroupId); } diff --git a/util/xml.ts b/util/xml.ts index 2c13b61..fadbb19 100644 --- a/util/xml.ts +++ b/util/xml.ts @@ -2,6 +2,12 @@ const xmlParser = new DOMParser(); const xmlSerializer = new XMLSerializer(); +export function isMimeXml(mimeType: string): boolean { + return mimeType === 'text/xml' + || mimeType === 'application/xml' + || mimeType.startsWith('application/') && mimeType.endsWith('+xml'); +} + export function parse(input: string): XMLDocument { return xmlParser.parseFromString(input, 'application/xml'); }