From 8bff66973cc973357fcb18cda8a87293f3714832 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Mon, 20 Nov 2023 17:31:43 -0500 Subject: [PATCH 1/2] Fix some exceptions trying to use the metadata providers --- packages/core/examples/webLoader/hardcodedMetaDataProvider.ts | 3 +++ .../src/imageLoader/wadouri/metaData/metaDataProvider.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts b/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts index 86717d9eb3..e05363a192 100644 --- a/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts +++ b/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts @@ -1,5 +1,8 @@ // Add hardcoded meta data provider for color images export default function hardcodedMetaDataProvider(type, imageId, imageIds) { + if (typeof imageId !== 'string') { + return; + } const colonIndex = imageId.indexOf(':'); const scheme = imageId.substring(0, colonIndex); if (scheme !== 'web') { diff --git a/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts b/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts index 2a07566c9f..d32d89d12f 100644 --- a/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts +++ b/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts @@ -22,6 +22,9 @@ import { } from '../../getInstanceModule'; function metaDataProvider(type, imageId) { + if (typeof imageId !== 'string') { + return; + } const { dicomParser } = external; // Several providers use array queries if (Array.isArray(imageId)) { From 7400a50628dedc0b3eb1fc162f9978b09b9dcf36 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Tue, 21 Nov 2023 14:12:07 -0500 Subject: [PATCH 2/2] fix: Use varargs for metadata provider to allow existing providers to continue working --- common/reviews/api/core.api.md | 6 +++--- .../webLoader/hardcodedMetaDataProvider.ts | 3 --- packages/core/src/metaData.ts | 5 ++--- .../imageRetrieveMetadataProvider.ts | 5 +---- .../spatialRegistrationMetadataProvider.ts | 4 +--- .../wadors/metaData/metaDataProvider.ts | 19 ++++++++----------- .../wadouri/metaData/metaDataProvider.ts | 3 --- .../callbacks/stackImageSyncCallback.ts | 3 ++- 8 files changed, 17 insertions(+), 31 deletions(-) diff --git a/common/reviews/api/core.api.md b/common/reviews/api/core.api.md index 78df38e3f1..992391f864 100644 --- a/common/reviews/api/core.api.md +++ b/common/reviews/api/core.api.md @@ -44,7 +44,7 @@ type ActorSliceRange = { }; // @public (undocumented) -function addProvider(provider: (type: string, query: any) => any, priority?: number): void; +function addProvider(provider: (type: string, ...query: string[]) => any, priority?: number): void; // @public (undocumented) export function addVolumesToViewports(renderingEngine: IRenderingEngine, volumeInputs: Array, viewportIds: Array, immediateRender?: boolean, suppressEvents?: boolean): Promise; @@ -1539,7 +1539,7 @@ const imageRetrieveMetadataProvider: { IMAGE_RETRIEVE_CONFIGURATION: string; clear: () => void; add: (key: string, payload: any) => void; - get: (type: string, queriesOrQuery: string | string[]) => any; + get: (type: string, ...queries: string[]) => any; }; // @public (undocumented) @@ -2540,7 +2540,7 @@ function snapFocalPointToSlice(focalPoint: Point3, position: Point3, sliceRange: // @public (undocumented) const spatialRegistrationMetadataProvider: { add: (query: string[], payload: mat4) => void; - get: (type: string, query: string[]) => mat4; + get: (type: string, viewportId1: string, viewportId2: string) => mat4; }; // @public (undocumented) diff --git a/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts b/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts index e05363a192..86717d9eb3 100644 --- a/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts +++ b/packages/core/examples/webLoader/hardcodedMetaDataProvider.ts @@ -1,8 +1,5 @@ // Add hardcoded meta data provider for color images export default function hardcodedMetaDataProvider(type, imageId, imageIds) { - if (typeof imageId !== 'string') { - return; - } const colonIndex = imageId.indexOf(':'); const scheme = imageId.substring(0, colonIndex); if (scheme !== 'web') { diff --git a/packages/core/src/metaData.ts b/packages/core/src/metaData.ts index abcdb8bc93..f8a159f399 100644 --- a/packages/core/src/metaData.ts +++ b/packages/core/src/metaData.ts @@ -11,7 +11,7 @@ const providers = []; * @category MetaData */ export function addProvider( - provider: (type: string, query: any) => any, + provider: (type: string, ...query: string[]) => any, priority = 0 ): void { let i; @@ -73,10 +73,9 @@ export function removeAllProviders(): void { * @category MetaData */ function getMetaData(type: string, ...queries): any { - const query = queries.length === 1 ? queries[0] : queries; // Invoke each provider in priority order until one returns something for (let i = 0; i < providers.length; i++) { - const result = providers[i].provider(type, query); + const result = providers[i].provider(type, ...queries); if (result !== undefined) { return result; diff --git a/packages/core/src/utilities/imageRetrieveMetadataProvider.ts b/packages/core/src/utilities/imageRetrieveMetadataProvider.ts index 1ffe296f18..d1ae70dfe4 100644 --- a/packages/core/src/utilities/imageRetrieveMetadataProvider.ts +++ b/packages/core/src/utilities/imageRetrieveMetadataProvider.ts @@ -20,10 +20,7 @@ const imageRetrieveMetadataProvider = { retrieveConfigurationState.set(key, payload); }, - get: (type: string, queriesOrQuery: string | string[]) => { - const queries = Array.isArray(queriesOrQuery) - ? queriesOrQuery - : [queriesOrQuery]; + get: (type: string, ...queries: string[]) => { if (type === IMAGE_RETRIEVE_CONFIGURATION) { return queries .map((query) => retrieveConfigurationState.get(query)) diff --git a/packages/core/src/utilities/spatialRegistrationMetadataProvider.ts b/packages/core/src/utilities/spatialRegistrationMetadataProvider.ts index 8eae0dcd53..40265aa0d0 100644 --- a/packages/core/src/utilities/spatialRegistrationMetadataProvider.ts +++ b/packages/core/src/utilities/spatialRegistrationMetadataProvider.ts @@ -19,13 +19,11 @@ const spatialRegistrationMetadataProvider = { state[entryId] = payload; }, - get: (type: string, query: string[]): mat4 => { + get: (type: string, viewportId1: string, viewportId2: string): mat4 => { if (type !== 'spatialRegistrationModule') { return; } - const [viewportId1, viewportId2] = query; - // check both ways const entryId = `${viewportId1}_${viewportId2}`; diff --git a/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts index 5625293959..2d8c189ea2 100644 --- a/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts +++ b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts @@ -21,9 +21,6 @@ import { } from '../../getInstanceModule'; function metaDataProvider(type, imageId) { - if (Array.isArray(imageId)) { - return; - } const { MetadataModules } = external.cornerstone.Enums; if (type === MetadataModules.MULTIFRAME) { // the get function removes the PerFrameFunctionalGroupsSequence @@ -312,13 +309,13 @@ export function getCineModule(imageId, metaData) { } export function getTransferSyntax(imageId, metaData) { - // Use either the FMI, which is NOT permitted in the DICOMweb data, but - // is sometimes found there anyways, or the available transfer syntax, which - // is the recommended way of getting it. - return { - transferSyntaxUID: - getValue(metaData['00020010']) || - getValue(metaData['00083002']), - }; + // Use either the FMI, which is NOT permitted in the DICOMweb data, but + // is sometimes found there anyways, or the available transfer syntax, which + // is the recommended way of getting it. + return { + transferSyntaxUID: + getValue(metaData['00020010']) || + getValue(metaData['00083002']), + }; } export default metaDataProvider; diff --git a/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts b/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts index d32d89d12f..2a07566c9f 100644 --- a/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts +++ b/packages/dicomImageLoader/src/imageLoader/wadouri/metaData/metaDataProvider.ts @@ -22,9 +22,6 @@ import { } from '../../getInstanceModule'; function metaDataProvider(type, imageId) { - if (typeof imageId !== 'string') { - return; - } const { dicomParser } = external; // Several providers use array queries if (Array.isArray(imageId)) { diff --git a/packages/tools/src/synchronizers/callbacks/stackImageSyncCallback.ts b/packages/tools/src/synchronizers/callbacks/stackImageSyncCallback.ts index 16848a5cda..0d5ae077c2 100644 --- a/packages/tools/src/synchronizers/callbacks/stackImageSyncCallback.ts +++ b/packages/tools/src/synchronizers/callbacks/stackImageSyncCallback.ts @@ -12,7 +12,8 @@ import areViewportsCoplanar from './areViewportsCoplanar '; const getSpatialRegistration = (targetId, sourceId) => utilities.spatialRegistrationMetadataProvider.get( 'spatialRegistrationModule', - [targetId, sourceId] + targetId, + sourceId ); /**