fix: Better handle octet stream case (#5789)
* Better handle octet stream case * Use data source config stack options * Use immutability helper * Use immutability helper (update) --------- Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
This commit is contained in:
parent
5837e6507e
commit
037402f7f6
@ -63,10 +63,10 @@
|
|||||||
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
|
"@itk-wasm/morphological-contour-interpolation": "1.1.0",
|
||||||
"@kitware/vtk.js": "34.15.1",
|
"@kitware/vtk.js": "34.15.1",
|
||||||
"html2canvas": "1.4.1",
|
"html2canvas": "1.4.1",
|
||||||
|
"immutability-helper": "3.1.1",
|
||||||
"lodash.compact": "3.0.1",
|
"lodash.compact": "3.0.1",
|
||||||
"lodash.debounce": "4.0.8",
|
"lodash.debounce": "4.0.8",
|
||||||
"lodash.flatten": "4.4.0",
|
"lodash.flatten": "4.4.0",
|
||||||
"lodash.merge": "4.6.2",
|
|
||||||
"lodash.zip": "4.2.0",
|
"lodash.zip": "4.2.0",
|
||||||
"shader-loader": "1.3.1",
|
"shader-loader": "1.3.1",
|
||||||
"worker-loader": "3.0.8"
|
"worker-loader": "3.0.8"
|
||||||
|
|||||||
@ -59,6 +59,7 @@ import utils from './utils';
|
|||||||
import { useMeasurementTracking } from './hooks/useMeasurementTracking';
|
import { useMeasurementTracking } from './hooks/useMeasurementTracking';
|
||||||
import { setUpSegmentationEventHandlers } from './utils/setUpSegmentationEventHandlers';
|
import { setUpSegmentationEventHandlers } from './utils/setUpSegmentationEventHandlers';
|
||||||
import { setUpAnnotationEventHandlers } from './utils/setUpAnnotationEventHandlers';
|
import { setUpAnnotationEventHandlers } from './utils/setUpAnnotationEventHandlers';
|
||||||
|
import update from 'immutability-helper';
|
||||||
export * from './components';
|
export * from './components';
|
||||||
|
|
||||||
const { imageRetrieveMetadataProvider } = cornerstone.utilities;
|
const { imageRetrieveMetadataProvider } = cornerstone.utilities;
|
||||||
@ -75,7 +76,7 @@ const OHIFCornerstoneViewport = props => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const stackRetrieveOptions = {
|
const DEFAULT_STACK_RETRIEVE_OPTIONS = {
|
||||||
retrieveOptions: {
|
retrieveOptions: {
|
||||||
single: {
|
single: {
|
||||||
streaming: true,
|
streaming: true,
|
||||||
@ -84,6 +85,12 @@ const stackRetrieveOptions = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Normalize to immutability-helper spec: plain object → $merge, otherwise use as-is. */
|
||||||
|
const toUpdateSpec = (obj: object) =>
|
||||||
|
obj != null && typeof obj === 'object' && Object.keys(obj).some(k => k.startsWith('$'))
|
||||||
|
? obj
|
||||||
|
: { $merge: (obj ?? {}) as object };
|
||||||
|
|
||||||
const unsubscriptions = [];
|
const unsubscriptions = [];
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -94,7 +101,11 @@ const cornerstoneExtension: Types.Extensions.Extension = {
|
|||||||
*/
|
*/
|
||||||
id,
|
id,
|
||||||
|
|
||||||
onModeEnter: ({ servicesManager, commandsManager }: withAppTypes): void => {
|
onModeEnter: ({
|
||||||
|
servicesManager,
|
||||||
|
commandsManager,
|
||||||
|
extensionManager,
|
||||||
|
}: withAppTypes): void => {
|
||||||
const { cornerstoneViewportService, toolbarService, segmentationService } =
|
const { cornerstoneViewportService, toolbarService, segmentationService } =
|
||||||
servicesManager.services;
|
servicesManager.services;
|
||||||
|
|
||||||
@ -131,10 +142,17 @@ const cornerstoneExtension: Types.Extensions.Extension = {
|
|||||||
'volume',
|
'volume',
|
||||||
cornerstone.ProgressiveRetrieveImages.interleavedRetrieveStages
|
cornerstone.ProgressiveRetrieveImages.interleavedRetrieveStages
|
||||||
);
|
);
|
||||||
// The default stack loading option is to progressive load HTJ2K images
|
|
||||||
// There are other possible options, but these need more thought about
|
/**
|
||||||
// how to define them.
|
* Stack retrieve options: read from active data source configuration.
|
||||||
imageRetrieveMetadataProvider.add('stack', stackRetrieveOptions);
|
* Pass an immutability-helper spec (e.g. { $merge: {...} } or { $set: {...} }) in
|
||||||
|
* stackRetrieveOptions to customize. Plain object is treated as $merge for backward compat.
|
||||||
|
* Set streaming: false for uncompressed DICOM that requires full file before decode.
|
||||||
|
*/
|
||||||
|
const sourceConfig = extensionManager?.getActiveDataSource?.()?.[0]?.getConfig?.() ?? {};
|
||||||
|
const config = sourceConfig.stackRetrieveOptions ?? {};
|
||||||
|
const stackOptions = update(DEFAULT_STACK_RETRIEVE_OPTIONS, toUpdateSpec(config)) as typeof DEFAULT_STACK_RETRIEVE_OPTIONS;
|
||||||
|
imageRetrieveMetadataProvider.add('stack', stackOptions);
|
||||||
},
|
},
|
||||||
getPanelModule,
|
getPanelModule,
|
||||||
onModeExit: ({ servicesManager }: withAppTypes): void => {
|
onModeExit: ({ servicesManager }: withAppTypes): void => {
|
||||||
|
|||||||
@ -312,6 +312,18 @@ reasons:
|
|||||||
However, if you would like to get compressed data in a specific transfer syntax, you can modify the `acceptHeader` configuration or
|
However, if you would like to get compressed data in a specific transfer syntax, you can modify the `acceptHeader` configuration or
|
||||||
`requestTransferSyntaxUID` configuration.
|
`requestTransferSyntaxUID` configuration.
|
||||||
|
|
||||||
|
### Data Source: stackRetrieveOptions
|
||||||
|
At the data source configuration level, you can set `stackRetrieveOptions` to customize Cornerstone stack image retrieval. Merged with defaults; only specify overrides. For example, set `streaming: false` when the data source returns uncompressed DICOM (e.g. `application/octet-stream` only) to avoid black image on load:
|
||||||
|
|
||||||
|
```js
|
||||||
|
configuration: {
|
||||||
|
acceptHeader: ['application/octet-stream'],
|
||||||
|
stackRetrieveOptions: {
|
||||||
|
retrieveOptions: { single: { streaming: false } },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
We use environment variables at build and dev time to change the Viewer's
|
We use environment variables at build and dev time to change the Viewer's
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user