fix: 🐛 Add DicomLoaderService & FileLoaderService to fix SR, PDF, and SEG support in local file and WADO-RS-only use cases (#862)
* fix: 🐛 Local file: failing when retrieving segmentation data Fix segmentation data retrieval issues for local file. Changed from fecthing to use cornerstone loadAndCache method BREAKING CHANGE: DICOM Seg Closes: part of #838 * Switch SEG retrieval to WADO-RS * Forgot a debugger * refactor: 💡 Code refactor. Minor changes into methods * fix: 🐛 Load local files: PDF Items: 1. FileLoaderService: used for serveral operations on local files(load it, get list of studies, group them, accepting dicom and pdf) 2. DicomLoaderService: used for loading dicom based on dataset and studies. Depending on type of dicom loader might change. WIP 3. Refactor PDF and handleSegmentationStorage to use DicomLoaderService * fix: 🐛 Code review * fix: 🐛 Code review. Changed:Folder organization and dicom file Move fileLoaderService and others to a specific folder. When loading dicom file change to only retrieve the file(not use cornerstone to cache or anything else). * fix: 🐛 Code review. Move dicomLoaderService to core Moved dicomLoaderService to ohif/core and localFileLoaders to a specific folder. * fix: 🐛 Code review Simplified method to get study for dicom file. Added error handling on file loading. DicomLoaderService to be exposed on ohif/core/utils instead. * fix: 🐛 Reduce local load to one method only Reduced local file load to one method only * fix: 🐛 HTML to use dicomLoaderService. Prefer wadors than (uri) * fix: 🐛 Code implementation for multiframe files * fix: 🐛 Code review. Default local loader to dicom Closes: 838 * fix: 🐛 Code review. Use relative path to require DICOMWeb Closes: 838 * fix: 🐛 Code review. Fix unit test. Added DicomLoaderService mod Closes: 838 * fix: 🐛 Code review. Add 'Seg' on left thumb When getting/creating dataset get modality for file/image read Closes: 838
This commit is contained in:
1 parent
e66c27affb
commit
e7e1a8a6cd
16 files changed
+629
-272
No files matched your search
@@ -0,0 +1,82 @@
|
||||
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
|
||||
import FileLoader from './fileLoader';
|
||||
import PDFFileLoader from './pdfFileLoader';
|
||||
import DICOMFileLoader from './dicomFileLoader';
|
||||
|
||||
class FileLoaderService extends FileLoader {
|
||||
fileType;
|
||||
loader;
|
||||
constructor(file) {
|
||||
super();
|
||||
const fileType = file && file.type;
|
||||
this.loader = this.getLoader(fileType);
|
||||
this.fileType = this.loader.fileType;
|
||||
}
|
||||
|
||||
static groupSeries(studies) {
|
||||
const groupBy = (list, groupByKey, listKey) => {
|
||||
let nonKeyCounter = 1;
|
||||
|
||||
return list.reduce((acc, obj) => {
|
||||
let key = obj[groupByKey];
|
||||
const list = obj[listKey];
|
||||
|
||||
// in case key not found, group it using counter
|
||||
key = !!key ? key : '' + nonKeyCounter++;
|
||||
|
||||
if (!acc[key]) {
|
||||
acc[key] = { ...obj };
|
||||
acc[key][listKey] = [];
|
||||
}
|
||||
|
||||
acc[key][listKey].push(...list);
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
const studiesGrouped = Object.values(
|
||||
groupBy(studies, 'studyInstanceUid', 'seriesList')
|
||||
);
|
||||
|
||||
const result = studiesGrouped.map(studyGroup => {
|
||||
const seriesGrouped = groupBy(
|
||||
studyGroup.seriesList,
|
||||
'seriesInstanceUid',
|
||||
'instances'
|
||||
);
|
||||
studyGroup.seriesList = Object.values(seriesGrouped);
|
||||
|
||||
return studyGroup;
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
addFile(file) {
|
||||
return cornerstoneWADOImageLoader.wadouri.fileManager.add(file);
|
||||
}
|
||||
|
||||
loadFile(file, imageId) {
|
||||
return this.loader.loadFile(file, imageId);
|
||||
}
|
||||
|
||||
getDataset(image, imageId) {
|
||||
return this.loader.getDataset(image, imageId);
|
||||
}
|
||||
|
||||
getStudies(dataset, imageId) {
|
||||
return this.loader.getStudies(dataset, imageId);
|
||||
}
|
||||
|
||||
getLoader(fileType) {
|
||||
if (fileType === 'application/pdf') {
|
||||
return PDFFileLoader;
|
||||
} else {
|
||||
// Default to dicom loader
|
||||
return DICOMFileLoader;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default FileLoaderService;
|
||||
Reference in new issue
Block a user