Skip to content

Commit 8d7b926

Browse files
Replaced the tar file request with cod request
1 parent 91491a5 commit 8d7b926

File tree

10 files changed

+85
-342
lines changed

10 files changed

+85
-342
lines changed

packages/dicomImageLoader/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"@cornerstonejs/codec-openjpeg": "^1.2.2",
6868
"@cornerstonejs/codec-openjph": "^2.4.5",
6969
"@cornerstonejs/core": "^1.41.0",
70+
"cod-dicomweb-server": "^1.3.4",
7071
"dicom-parser": "^1.8.9",
7172
"jszip": "^3.10.1",
7273
"pako": "^2.0.4",
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { CodDicomWebServer } from 'cod-dicomweb-server';
2+
3+
let codWebServer: CodDicomWebServer;
4+
5+
export function setWadoRsWebServer(webServer: CodDicomWebServer) {
6+
codWebServer = webServer;
7+
}
8+
9+
export function getWadoRsWebServer(): CodDicomWebServer {
10+
return codWebServer;
11+
}

packages/dicomImageLoader/src/imageLoader/internal/loadTarRequest.ts

Lines changed: 0 additions & 180 deletions
This file was deleted.

packages/dicomImageLoader/src/imageLoader/internal/tarRequest.ts

Lines changed: 0 additions & 82 deletions
This file was deleted.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { Enums, metaData } from '@cornerstonejs/core';
2+
import { FetchType } from 'cod-dicomweb-server';
3+
4+
import { getWadoRsWebServer } from '../internal/codWebServer';
5+
import { getOptions } from '../internal/options';
6+
import type { CornerstoneWadoRsLoaderOptions } from '../wadors/loadImage';
7+
8+
export default function codRequest(
9+
url: string,
10+
imageId: string,
11+
defaultHeaders: Record<string, string> = {},
12+
options: CornerstoneWadoRsLoaderOptions = {}
13+
): Promise<{
14+
contentType: string;
15+
pixelData: Uint8Array;
16+
imageQualityStatus: Enums.ImageQualityStatus;
17+
percentComplete: number;
18+
}> {
19+
const instance = metaData.get('instance', imageId) || {};
20+
const {
21+
DeidStudyInstanceUID,
22+
DeidSeriesInstanceUID,
23+
DeidSopInstanceUID,
24+
TransferSyntaxUID,
25+
} = instance;
26+
27+
const deidReplacedUrl = url.replace(
28+
/\/studies\/[^/]+\/series\/[^/]+\/instances\/[^/]+\/frames\//,
29+
`/studies/${DeidStudyInstanceUID}/series/${DeidSeriesInstanceUID}/instances/${DeidSopInstanceUID}/frames/`
30+
);
31+
32+
// @ts-ignore
33+
const headers = getOptions()?.beforeSend() || {};
34+
const webServer = getWadoRsWebServer();
35+
36+
return webServer
37+
.fetchCod(
38+
deidReplacedUrl,
39+
{ ...defaultHeaders, ...headers },
40+
{
41+
useSharedArrayBuffer: false,
42+
fetchType: FetchType.API_OPTIMIZED,
43+
}
44+
)
45+
.then((result) => ({
46+
contentType: `transfer-syntax=${TransferSyntaxUID}`,
47+
imageQualityStatus: Enums.ImageQualityStatus.FULL_RESOLUTION,
48+
pixelData: new Uint8Array(result as ArrayBufferLike),
49+
percentComplete: 100,
50+
}))
51+
.catch((error) => {
52+
throw error;
53+
});
54+
}

packages/dicomImageLoader/src/imageLoader/wadors/getPixelData.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import { xhrRequest } from '../internal/index';
22
// import rangeRequest from '../internal/rangeRequest';
33
import streamRequest from '../internal/streamRequest';
44
import rangeRequest from '../internal/rangeRequest';
5-
import tarRequest from '../internal/tarRequest';
65
import extractMultipart from './extractMultipart';
76
import { getImageQualityStatus } from './getImageQualityStatus';
87
import { CornerstoneWadoRsLoaderOptions } from './loadImage';
98
import { RangeRetrieveOptions } from 'core/dist/types/types';
9+
import codRequest from './codRequest';
1010

1111
function getPixelData(
1212
uri: string,
@@ -38,6 +38,11 @@ function getPixelData(
3838
options.streamingData = { url };
3939
}
4040

41+
// Use the cod loader only when image scheme is cod:
42+
if (imageId.startsWith('cod:')) {
43+
return codRequest(url, imageId, headers);
44+
}
45+
4146
if ((retrieveOptions as RangeRetrieveOptions).rangeIndex !== undefined) {
4247
return rangeRequest(url, imageId, headers, options);
4348
}
@@ -47,12 +52,6 @@ function getPixelData(
4752
return streamRequest(url, imageId, headers, options);
4853
}
4954

50-
// Use the tar loader for dicomtar sceme
51-
if (imageId.includes('dicomtar')) {
52-
const url = imageId.split('dicomtar:')[1];
53-
return tarRequest(url, imageId, headers);
54-
}
55-
5655
/**
5756
* Not progressively rendering, use regular xhr request.
5857
*/

packages/dicomImageLoader/src/imageLoader/wadors/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import getPixelData from './getPixelData';
1111
import metaDataManager from './metaDataManager';
1212
import loadImage from './loadImage';
1313
import register from './register';
14-
import tarFileManager from './tarFileManager';
1514

1615
const metaData = {
1716
getNumberString,
@@ -28,5 +27,4 @@ export default {
2827
loadImage,
2928
metaDataManager,
3029
register,
31-
tarFileManager,
3230
};

packages/dicomImageLoader/src/imageLoader/wadors/loadImage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ function loadImage(
198198
const additionalDetails = options.additionalDetails || { imageId };
199199
const priority = options.priority === undefined ? 5 : options.priority;
200200
const addToBeginning = options.addToBeginning || false;
201-
const uri = imageId.substring(7);
201+
const uri = imageId.substring(imageId.indexOf(':') + 1);
202202

203203
imageRetrievalPool.addRequest(
204204
sendXHR.bind(this, uri, imageId, mediaType),

0 commit comments

Comments
 (0)