WIP
This commit is contained in:
parent
b5cd7bb0b7
commit
d5c83bf596
@ -8,9 +8,9 @@ import {
|
||||
} from './qido.js';
|
||||
import { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core';
|
||||
import * as dcmjs from 'dcmjs';
|
||||
import exampleInstances from './exampleInstances.js';
|
||||
//import { retrieveStudyMetadata } from './retrieveStudyMetadata.js';
|
||||
import { retrieveStudyMetadata } from './retrieveStudyMetadata.js';
|
||||
|
||||
const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
||||
const { urlUtil } = utils;
|
||||
|
||||
/**
|
||||
@ -96,22 +96,40 @@ function createDicomWebApi(dicomWebConfig) {
|
||||
);
|
||||
}
|
||||
|
||||
// const promises = StudyInstanceUIDs.map(StudyInstanceUID =>
|
||||
// retrieveStudyMetadata(
|
||||
// wadoDicomWebClient,
|
||||
// StudyInstanceUID,
|
||||
// enableStudyLazyLoad
|
||||
// )
|
||||
// );
|
||||
const storeInstances = instances => {
|
||||
const naturalizedInstances = instances.map(naturalizeDataset);
|
||||
|
||||
dicomMetadataStore.addInstances(naturalizedInstances);
|
||||
callback(naturalizedInstances);
|
||||
};
|
||||
|
||||
const studyPromises = StudyInstanceUIDs.map(StudyInstanceUID =>
|
||||
retrieveStudyMetadata(
|
||||
wadoDicomWebClient,
|
||||
StudyInstanceUID,
|
||||
enableStudyLazyLoad
|
||||
)
|
||||
);
|
||||
|
||||
studyPromises.forEach(studyPromise => {
|
||||
studyPromise.then(seriesPromises => {
|
||||
seriesPromises.forEach(seriesPromise => {
|
||||
seriesPromise.then(instances => {
|
||||
debugger;
|
||||
storeInstances(instances);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// TEMP use dummy data.
|
||||
const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
||||
const instances = exampleInstances.map(naturalizeDataset);
|
||||
//const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
||||
//const instances = exampleInstances.map(naturalizeDataset);
|
||||
|
||||
// TEMP
|
||||
|
||||
dicomMetadataStore.addInstances(instances);
|
||||
callback(instances);
|
||||
//dicomMetadataStore.addInstances(instances);
|
||||
//callback(instances);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import RetrieveMetadata from './services/wado/retrieveMetadata.js';
|
||||
import RetrieveMetadata from './wado/retrieveMetadata.js';
|
||||
|
||||
const moduleName = 'RetrieveStudyMetadata';
|
||||
// Cache for promises. Prevents unnecessary subsequent calls to the server
|
||||
@ -9,6 +9,8 @@ const StudyMetaDataPromises = new Map();
|
||||
*
|
||||
* @param {Object} server Object with server configuration parameters
|
||||
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
|
||||
* @param {boolean} enabledStudyLazyLoad Whether the study metadata should be loaded asynchronusly.
|
||||
* @param {function} storeInstancesCallback A callback used to store the retrieved instance metadata.
|
||||
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
||||
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
||||
* @returns {Promise} that will be resolved with the metadata or rejected with the error
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import RetrieveMetadataLoaderSync from './retrieveMetadataLoaderSync';
|
||||
//import RetrieveMetadataLoaderSync from './retrieveMetadataLoaderSync';
|
||||
import RetrieveMetadataLoaderAsync from './retrieveMetadataLoaderAsync';
|
||||
|
||||
/**
|
||||
@ -17,10 +17,12 @@ async function RetrieveMetadata(
|
||||
enableStudyLazyLoad,
|
||||
filters = {}
|
||||
) {
|
||||
const RetrieveMetadataLoader =
|
||||
enableStudyLazyLoad !== false
|
||||
? RetrieveMetadataLoaderAsync
|
||||
: RetrieveMetadataLoaderSync;
|
||||
// const RetrieveMetadataLoader =
|
||||
// enableStudyLazyLoad !== false
|
||||
// ? RetrieveMetadataLoaderAsync
|
||||
// : RetrieveMetadataLoaderSync;
|
||||
|
||||
const RetrieveMetadataLoader = RetrieveMetadataLoaderAsync;
|
||||
|
||||
const retrieveMetadataLoader = new RetrieveMetadataLoader(
|
||||
dicomWebClient,
|
||||
|
||||
@ -14,7 +14,7 @@ export default class RetrieveMetadataLoader {
|
||||
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
||||
*/
|
||||
constructor(client, studyInstanceUID, filters = {}) {
|
||||
this.client = dicomwWebClient;
|
||||
this.client = client;
|
||||
this.studyInstanceUID = studyInstanceUID;
|
||||
this.filters = filters;
|
||||
}
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
||||
import { sortStudySeries, sortingCriteria } from '../../sortStudy';
|
||||
import getSeriesInfo from '../../getSeriesInfo';
|
||||
import {
|
||||
createStudyFromSOPInstanceList,
|
||||
addInstancesToStudy,
|
||||
} from './studyInstanceHelpers';
|
||||
//import { sortStudySeries, sortingCriteria } from '../../sortStudy';
|
||||
import getSeriesInfo from './utils/getSeriesInfo';
|
||||
// import {
|
||||
// createStudyFromSOPInstanceList,
|
||||
// addInstancesToStudy,
|
||||
// } from './studyInstanceHelpers';
|
||||
|
||||
/**
|
||||
* Map seriesList to an array of seriesInstanceUid
|
||||
@ -15,18 +15,18 @@ function mapStudySeries(seriesList) {
|
||||
return seriesList.map(series => getSeriesInfo(series).seriesInstanceUid);
|
||||
}
|
||||
|
||||
function attachSeriesLoader(server, study, seriesLoader) {
|
||||
study.seriesLoader = Object.freeze({
|
||||
hasNext() {
|
||||
return seriesLoader.hasNext();
|
||||
},
|
||||
async next() {
|
||||
const series = await seriesLoader.next();
|
||||
await addInstancesToStudy(server, study, series.sopInstances);
|
||||
return study.seriesMap[series.seriesInstanceUID];
|
||||
},
|
||||
});
|
||||
}
|
||||
// function attachSeriesLoader(server, study, seriesLoader) {
|
||||
// study.seriesLoader = Object.freeze({
|
||||
// hasNext() {
|
||||
// return seriesLoader.hasNext();
|
||||
// },
|
||||
// async next() {
|
||||
// const series = await seriesLoader.next();
|
||||
// await addInstancesToStudy(server, study, series.sopInstances);
|
||||
// return study.seriesMap[series.seriesInstanceUID];
|
||||
// },
|
||||
// });
|
||||
// }
|
||||
|
||||
/**
|
||||
* Creates an immutable series loader object which loads each series sequentially using the iterator interface
|
||||
@ -46,11 +46,11 @@ function makeSeriesAsyncLoader(
|
||||
},
|
||||
async next() {
|
||||
const seriesInstanceUID = seriesInstanceUIDList.shift();
|
||||
const sopInstances = await client.retrieveSeriesMetadata({
|
||||
return client.retrieveSeriesMetadata({
|
||||
studyInstanceUID,
|
||||
seriesInstanceUID,
|
||||
});
|
||||
return { studyInstanceUID, seriesInstanceUID, sopInstances };
|
||||
// return { studyInstanceUID, seriesInstanceUID, sopInstances };
|
||||
},
|
||||
});
|
||||
}
|
||||
@ -90,11 +90,14 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader
|
||||
const preLoaders = this.getPreLoaders();
|
||||
const result = await this.runLoaders(preLoaders);
|
||||
|
||||
const seriesSorted = sortStudySeries(
|
||||
result,
|
||||
sortingCriteria.seriesSortCriteria.seriesInfoSortingCriteria
|
||||
);
|
||||
const seriesInstanceUidsMap = mapStudySeries(seriesSorted);
|
||||
// const seriesSorted = sortStudySeries(
|
||||
// result,
|
||||
// sortingCriteria.seriesSortCriteria.seriesInfoSortingCriteria
|
||||
// );
|
||||
|
||||
//const seriesInstanceUidsMap = mapStudySeries(seriesSorted);
|
||||
|
||||
const seriesInstanceUidsMap = mapStudySeries(result);
|
||||
|
||||
return seriesInstanceUidsMap;
|
||||
}
|
||||
@ -108,24 +111,35 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader
|
||||
preLoadData
|
||||
);
|
||||
|
||||
const firstSeries = await seriesAsyncLoader.next();
|
||||
// const firstSeries = await seriesAsyncLoader.next();
|
||||
|
||||
return {
|
||||
sopInstances: firstSeries.sopInstances,
|
||||
asyncLoader: seriesAsyncLoader,
|
||||
};
|
||||
}
|
||||
// return {
|
||||
// sopInstances: firstSeries.sopInstances,
|
||||
// asyncLoader: seriesAsyncLoader,
|
||||
// };
|
||||
|
||||
async posLoad(loadData) {
|
||||
const { client } = this;
|
||||
const { sopInstances, asyncLoader } = loadData;
|
||||
const promises = [];
|
||||
|
||||
const study = await createStudyFromSOPInstanceList(server, sopInstances);
|
||||
|
||||
if (asyncLoader.hasNext()) {
|
||||
attachSeriesLoader(server, study, asyncLoader);
|
||||
while (seriesAsyncLoader.hasNext()) {
|
||||
promises.push(seriesAsyncLoader.next());
|
||||
}
|
||||
|
||||
return study;
|
||||
return promises;
|
||||
|
||||
// if (asyncLoader.hasNext()) {
|
||||
}
|
||||
|
||||
async posLoad(promises) {
|
||||
return promises;
|
||||
// const { client } = this;
|
||||
// const { sopInstances, asyncLoader } = loadData;
|
||||
|
||||
// const study = await createStudyFromSOPInstanceList(server, sopInstances);
|
||||
|
||||
// if (asyncLoader.hasNext()) {
|
||||
// attachSeriesLoader(server, study, asyncLoader);
|
||||
// }
|
||||
|
||||
// return study;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { api } from 'dicomweb-client';
|
||||
import DICOMWeb from '../../../DICOMWeb/';
|
||||
// import { api } from 'dicomweb-client';
|
||||
// import DICOMWeb from '../../../DICOMWeb/';
|
||||
import { createStudyFromSOPInstanceList } from './studyInstanceHelpers';
|
||||
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
||||
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
import { DICOMWeb } from '@ohif/core';
|
||||
// import isLowPriorityModality from '../utils/isLowPriorityModality';
|
||||
|
||||
const INFO = Symbol('INFO');
|
||||
|
||||
/**
|
||||
* Creates an object with processed series information and saves its reference
|
||||
* inside the series object itself.
|
||||
* @param {Object} series The raw series object
|
||||
* @returns {Object} object containing some useful info from given series
|
||||
*/
|
||||
export default function getSeriesInfo(series) {
|
||||
let info = series[INFO];
|
||||
if (!info) {
|
||||
const modality = DICOMWeb.getString(series['00080060'], '').toUpperCase();
|
||||
info = Object.freeze({
|
||||
modality,
|
||||
// isLowPriority: isLowPriorityModality(modality), // TODO -> We should do this in the series list level, not here.
|
||||
seriesInstanceUid: DICOMWeb.getString(series['0020000E']),
|
||||
seriesNumber: DICOMWeb.getNumber(series['00200011'], 0) || 0,
|
||||
});
|
||||
series[INFO] = info;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
@ -7,8 +7,6 @@ class DisplaySetManager {
|
||||
this.extensionManager = extensionManager;
|
||||
this.SOPClassHandlerIds = SOPClassHandlerIds;
|
||||
|
||||
debugger;
|
||||
|
||||
const {
|
||||
displaySetInstanceUids,
|
||||
setDisplaySetInstanceUids,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user