ESLint
This commit is contained in:
parent
4055655c7a
commit
74d8cba5be
@ -2,252 +2,252 @@ import { $ } from 'meteor/jquery';
|
|||||||
import { Session } from 'meteor/session';
|
import { Session } from 'meteor/session';
|
||||||
|
|
||||||
class BaseLoadingListener {
|
class BaseLoadingListener {
|
||||||
constructor(stack) {
|
constructor(stack) {
|
||||||
this.id = BaseLoadingListener.getNewId();
|
this.id = BaseLoadingListener.getNewId();
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.startListening();
|
this.startListening();
|
||||||
}
|
}
|
||||||
|
|
||||||
_getProgressSessionId() {
|
_getProgressSessionId() {
|
||||||
const displaySetInstanceUid = this.stack.displaySetInstanceUid;
|
const displaySetInstanceUid = this.stack.displaySetInstanceUid;
|
||||||
return 'DisplaySetProgress:' + displaySetInstanceUid;
|
return 'DisplaySetProgress:' + displaySetInstanceUid;
|
||||||
}
|
}
|
||||||
|
|
||||||
_clearSession() {
|
_clearSession() {
|
||||||
const progressSessionId = this._getProgressSessionId();
|
const progressSessionId = this._getProgressSessionId();
|
||||||
Session.set(progressSessionId, undefined)
|
Session.set(progressSessionId, undefined);
|
||||||
delete Session.keys.progressSessionId;
|
delete Session.keys.progressSessionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
startListening() {
|
startListening() {
|
||||||
throw new Error('`startListening` must be implemented by child clases');
|
throw new Error('`startListening` must be implemented by child clases');
|
||||||
}
|
}
|
||||||
|
|
||||||
stopListening() {
|
stopListening() {
|
||||||
throw new Error('`stopListening` must be implemented by child clases');
|
throw new Error('`stopListening` must be implemented by child clases');
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this.stopListening();
|
this.stopListening();
|
||||||
this._clearSession();
|
this._clearSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
static getNewId() {
|
static getNewId() {
|
||||||
const timeSlice = (new Date()).getTime().toString().slice(-8);
|
const timeSlice = (new Date()).getTime().toString().slice(-8);
|
||||||
const randomNumber = parseInt(Math.random() * 1000000000);
|
const randomNumber = parseInt(Math.random() * 1000000000);
|
||||||
|
|
||||||
return timeSlice.toString() + randomNumber.toString();
|
return timeSlice.toString() + randomNumber.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DICOMFileLoadingListener extends BaseLoadingListener {
|
class DICOMFileLoadingListener extends BaseLoadingListener {
|
||||||
constructor(stack) {
|
constructor(stack) {
|
||||||
super(stack);
|
super(stack);
|
||||||
this.dataSetUrls = this._getDataSetUrls(stack);
|
this.dataSetUrls = this._getDataSetUrls(stack);
|
||||||
}
|
|
||||||
|
|
||||||
_getImageLoadProgressEventName() {
|
|
||||||
return 'CornerstoneImageLoadProgress.' + this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
startListening() {
|
|
||||||
const imageLoadProgressEventName = this._getImageLoadProgressEventName();
|
|
||||||
|
|
||||||
this.stopListening();
|
|
||||||
|
|
||||||
$(cornerstone).on(imageLoadProgressEventName, (e, eventData) => {
|
|
||||||
this._imageLoadProgressEventHandle(e, eventData);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
stopListening() {
|
|
||||||
const imageLoadProgressEventName = this._getImageLoadProgressEventName();
|
|
||||||
$(cornerstone).off(imageLoadProgressEventName);
|
|
||||||
}
|
|
||||||
|
|
||||||
_imageLoadProgressEventHandle(e, eventData) {
|
|
||||||
var dataSetUrl = this._getDataSetUrl(eventData.imageId);
|
|
||||||
|
|
||||||
if (!this.dataSetUrls.has(dataSetUrl)) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._triggerProgress(eventData);
|
_getImageLoadProgressEventName() {
|
||||||
}
|
return 'CornerstoneImageLoadProgress.' + this.id;
|
||||||
|
|
||||||
_triggerProgress(eventData) {
|
|
||||||
const progressSessionId = this._getProgressSessionId();
|
|
||||||
|
|
||||||
Session.set(progressSessionId, {
|
|
||||||
percentComplete: eventData.percentComplete,
|
|
||||||
bytesLoaded: eventData.loaded,
|
|
||||||
bytesTotal: eventData.total
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_getDataSetUrl(imageId) {
|
|
||||||
// Remove "frame=999&" from the imageId
|
|
||||||
imageId = imageId.replace(/frame=\d+&?/i, '');
|
|
||||||
|
|
||||||
// Remove the last "&" like in "dicomweb:...&serverId=GQGpJcb4CnYDdu53q&"
|
|
||||||
imageId = imageId.replace(/&$/, "");
|
|
||||||
|
|
||||||
return imageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
_getDataSetUrls(stack) {
|
|
||||||
const dataSetUrls = new Set();
|
|
||||||
const imageIds = stack.imageIds;
|
|
||||||
const length = stack.imageIds.length;
|
|
||||||
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
const dataSetUrl = this._getDataSetUrl(imageIds[i]);
|
|
||||||
dataSetUrls.add(dataSetUrl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataSetUrls;
|
startListening() {
|
||||||
}
|
const imageLoadProgressEventName = this._getImageLoadProgressEventName();
|
||||||
|
|
||||||
|
this.stopListening();
|
||||||
|
|
||||||
|
$(cornerstone).on(imageLoadProgressEventName, (e, eventData) => {
|
||||||
|
this._imageLoadProgressEventHandle(e, eventData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
stopListening() {
|
||||||
|
const imageLoadProgressEventName = this._getImageLoadProgressEventName();
|
||||||
|
$(cornerstone).off(imageLoadProgressEventName);
|
||||||
|
}
|
||||||
|
|
||||||
|
_imageLoadProgressEventHandle(e, eventData) {
|
||||||
|
const dataSetUrl = this._getDataSetUrl(eventData.imageId);
|
||||||
|
|
||||||
|
if (!this.dataSetUrls.has(dataSetUrl)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._triggerProgress(eventData);
|
||||||
|
}
|
||||||
|
|
||||||
|
_triggerProgress(eventData) {
|
||||||
|
const progressSessionId = this._getProgressSessionId();
|
||||||
|
|
||||||
|
Session.set(progressSessionId, {
|
||||||
|
percentComplete: eventData.percentComplete,
|
||||||
|
bytesLoaded: eventData.loaded,
|
||||||
|
bytesTotal: eventData.total
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_getDataSetUrl(imageId) {
|
||||||
|
// Remove "frame=999&" from the imageId
|
||||||
|
imageId = imageId.replace(/frame=\d+&?/i, '');
|
||||||
|
|
||||||
|
// Remove the last "&" like in "dicomweb:...&serverId=GQGpJcb4CnYDdu53q&"
|
||||||
|
imageId = imageId.replace(/&$/, '');
|
||||||
|
|
||||||
|
return imageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
_getDataSetUrls(stack) {
|
||||||
|
const dataSetUrls = new Set();
|
||||||
|
const imageIds = stack.imageIds;
|
||||||
|
const length = stack.imageIds.length;
|
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
const dataSetUrl = this._getDataSetUrl(imageIds[i]);
|
||||||
|
dataSetUrls.add(dataSetUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataSetUrls;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StackLoadingListener extends BaseLoadingListener {
|
class StackLoadingListener extends BaseLoadingListener {
|
||||||
constructor(stack) {
|
constructor(stack) {
|
||||||
super(stack);
|
super(stack);
|
||||||
this.remainingImageIds = stack.imageIds.slice();
|
this.remainingImageIds = stack.imageIds.slice();
|
||||||
this.loadedImageIds = [];
|
this.loadedImageIds = [];
|
||||||
}
|
|
||||||
|
|
||||||
_getImageLoadedEventName() {
|
|
||||||
return 'CornerstoneImageLoaded.' + this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
_getImageCachePromiseRemoveEventName() {
|
|
||||||
return 'CornerstoneImageCachePromiseRemoved.' + this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
startListening() {
|
|
||||||
const imageLoadedEventName = this._getImageLoadedEventName();
|
|
||||||
const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName();
|
|
||||||
|
|
||||||
this.stopListening();
|
|
||||||
|
|
||||||
$(cornerstone).on(imageLoadedEventName, (e, eventData) => {
|
|
||||||
this._imageLoadedEventHandle(e, eventData);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(cornerstone).on(imageCachePromiseRemovedEventName, (e, eventData) => {
|
|
||||||
this._imageCachePromiseRemovedEventHandle(e, eventData);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
stopListening() {
|
|
||||||
const imageLoadedEventName = this._getImageLoadedEventName();
|
|
||||||
const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName();
|
|
||||||
|
|
||||||
$(cornerstone).off(imageLoadedEventName);
|
|
||||||
$(cornerstone).off(imageCachePromiseRemovedEventName);
|
|
||||||
}
|
|
||||||
|
|
||||||
_moveImageId(imageId, srcImageIds, dstImageIds) {
|
|
||||||
const imageIdIndex = srcImageIds.indexOf(imageId);
|
|
||||||
|
|
||||||
if (imageIdIndex === -1) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dstImageIds.push(imageId);
|
_getImageLoadedEventName() {
|
||||||
srcImageIds.splice(imageIdIndex, 1);
|
return 'CornerstoneImageLoaded.' + this.id;
|
||||||
this._triggerProgress();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
_imageLoadedEventHandle(e, eventData) {
|
_getImageCachePromiseRemoveEventName() {
|
||||||
const imageId = eventData.image.imageId;
|
return 'CornerstoneImageCachePromiseRemoved.' + this.id;
|
||||||
this._moveImageId(imageId, this.remainingImageIds, this.loadedImageIds);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
_imageCachePromiseRemovedEventHandle(e, eventData) {
|
startListening() {
|
||||||
const imageId = eventData.imageId;
|
const imageLoadedEventName = this._getImageLoadedEventName();
|
||||||
this._moveImageId(imageId, this.loadedImageIds, this.remainingImageIds);
|
const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName();
|
||||||
}
|
|
||||||
|
|
||||||
_triggerProgress() {
|
this.stopListening();
|
||||||
const loadedImagesCount = this.loadedImageIds.length;
|
|
||||||
const remainingImagesCount = this.remainingImageIds.length;
|
|
||||||
const totalImagesCount = loadedImagesCount + remainingImagesCount;
|
|
||||||
const percentComplete = Math.round(loadedImagesCount / totalImagesCount * 100);
|
|
||||||
const progressSessionId = this._getProgressSessionId();
|
|
||||||
|
|
||||||
Session.set(progressSessionId, {
|
$(cornerstone).on(imageLoadedEventName, (e, eventData) => {
|
||||||
totalImagesCount,
|
this._imageLoadedEventHandle(e, eventData);
|
||||||
loadedImagesCount,
|
});
|
||||||
remainingImagesCount,
|
|
||||||
percentComplete
|
$(cornerstone).on(imageCachePromiseRemovedEventName, (e, eventData) => {
|
||||||
});
|
this._imageCachePromiseRemovedEventHandle(e, eventData);
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
stopListening() {
|
||||||
|
const imageLoadedEventName = this._getImageLoadedEventName();
|
||||||
|
const imageCachePromiseRemovedEventName = this._getImageCachePromiseRemoveEventName();
|
||||||
|
|
||||||
|
$(cornerstone).off(imageLoadedEventName);
|
||||||
|
$(cornerstone).off(imageCachePromiseRemovedEventName);
|
||||||
|
}
|
||||||
|
|
||||||
|
_moveImageId(imageId, srcImageIds, dstImageIds) {
|
||||||
|
const imageIdIndex = srcImageIds.indexOf(imageId);
|
||||||
|
|
||||||
|
if (imageIdIndex === -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dstImageIds.push(imageId);
|
||||||
|
srcImageIds.splice(imageIdIndex, 1);
|
||||||
|
this._triggerProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
_imageLoadedEventHandle(e, eventData) {
|
||||||
|
const imageId = eventData.image.imageId;
|
||||||
|
this._moveImageId(imageId, this.remainingImageIds, this.loadedImageIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
_imageCachePromiseRemovedEventHandle(e, eventData) {
|
||||||
|
const imageId = eventData.imageId;
|
||||||
|
this._moveImageId(imageId, this.loadedImageIds, this.remainingImageIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
_triggerProgress() {
|
||||||
|
const loadedImagesCount = this.loadedImageIds.length;
|
||||||
|
const remainingImagesCount = this.remainingImageIds.length;
|
||||||
|
const totalImagesCount = loadedImagesCount + remainingImagesCount;
|
||||||
|
const percentComplete = Math.round(loadedImagesCount / totalImagesCount * 100);
|
||||||
|
const progressSessionId = this._getProgressSessionId();
|
||||||
|
|
||||||
|
Session.set(progressSessionId, {
|
||||||
|
totalImagesCount,
|
||||||
|
loadedImagesCount,
|
||||||
|
remainingImagesCount,
|
||||||
|
percentComplete
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StudyLoadingListener {
|
class StudyLoadingListener {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.listeners = {};
|
this.listeners = {};
|
||||||
}
|
|
||||||
|
|
||||||
addStack(stack, options) {
|
|
||||||
const displaySetInstanceUid = stack.displaySetInstanceUid;
|
|
||||||
|
|
||||||
if (!this.listeners[displaySetInstanceUid]) {
|
|
||||||
listener = this._createListener(stack, options);
|
|
||||||
if (listener) {
|
|
||||||
this.listeners[displaySetInstanceUid] = listener;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addStudy(study) {
|
|
||||||
study.displaySets.forEach(displaySet => {
|
|
||||||
const stack = OHIF.viewerbase.stackManager.findOrCreateStack(study, displaySet);
|
|
||||||
this.addStack(stack, {
|
|
||||||
isMultiFrame: displaySet.isMultiFrame
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
addStudies(studies) {
|
|
||||||
if (!studies || !studies.length) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < studies.length; i++) {
|
addStack(stack, options) {
|
||||||
this.addStudy(studies[i]);
|
const displaySetInstanceUid = stack.displaySetInstanceUid;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clear() {
|
if (!this.listeners[displaySetInstanceUid]) {
|
||||||
const displaySetInstanceUids = Object.keys(this.listeners);
|
listener = this._createListener(stack, options);
|
||||||
const length = displaySetInstanceUids.length;
|
if (listener) {
|
||||||
|
this.listeners[displaySetInstanceUid] = listener;
|
||||||
for (let i = 0; i < length; i++) {
|
}
|
||||||
const displaySetInstanceUid = displaySetInstanceUids[i];
|
}
|
||||||
const displaySet = this.listeners[displaySetInstanceUid]
|
|
||||||
displaySet.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.listeners = {};
|
addStudy(study) {
|
||||||
}
|
study.displaySets.forEach(displaySet => {
|
||||||
|
const stack = OHIF.viewerbase.stackManager.findOrCreateStack(study, displaySet);
|
||||||
_createListener(stack, options) {
|
this.addStack(stack, {
|
||||||
const schema = this._getSchema(stack);
|
isMultiFrame: displaySet.isMultiFrame
|
||||||
|
});
|
||||||
if ((schema === 'wadors') || !options.isMultiFrame) {
|
});
|
||||||
return new StackLoadingListener(stack)
|
|
||||||
} else if ((schema === 'dicomweb') || (schema === 'wadouri')) {
|
|
||||||
return new DICOMFileLoadingListener(stack);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
_getSchema(stack) {
|
addStudies(studies) {
|
||||||
const imageId = stack.imageIds[0];
|
if (!studies || !studies.length) {
|
||||||
const colonIndex = imageId.indexOf(":");
|
return;
|
||||||
return imageId.substring(0, colonIndex);
|
}
|
||||||
}
|
|
||||||
|
for (let i = 0; i < studies.length; i++) {
|
||||||
|
this.addStudy(studies[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
const displaySetInstanceUids = Object.keys(this.listeners);
|
||||||
|
const length = displaySetInstanceUids.length;
|
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
const displaySetInstanceUid = displaySetInstanceUids[i];
|
||||||
|
const displaySet = this.listeners[displaySetInstanceUid];
|
||||||
|
displaySet.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.listeners = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
_createListener(stack, options) {
|
||||||
|
const schema = this._getSchema(stack);
|
||||||
|
|
||||||
|
if ((schema === 'wadors') || !options.isMultiFrame) {
|
||||||
|
return new StackLoadingListener(stack);
|
||||||
|
} else if ((schema === 'dicomweb') || (schema === 'wadouri')) {
|
||||||
|
return new DICOMFileLoadingListener(stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_getSchema(stack) {
|
||||||
|
const imageId = stack.imageIds[0];
|
||||||
|
const colonIndex = imageId.indexOf(':');
|
||||||
|
return imageId.substring(0, colonIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Singleton
|
// Singleton
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user