* 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
83 lines
1.9 KiB
JavaScript
83 lines
1.9 KiB
JavaScript
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;
|