All files / extensions/cornerstone/src initCineService.ts

78.57% Statements 22/28
75% Branches 6/8
70% Functions 7/10
76.92% Lines 20/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71        6x 9x 9x   6x                     30x   30x 30x   30x 21x     9x   9x   9x 9x                             34x   34x 30x     34x       34x 69x     34x                
import { cache, Types } from '@cornerstonejs/core';
import { utilities } from '@cornerstonejs/tools';
 
function _getVolumeFromViewport(viewport: Types.IBaseVolumeViewport) {
  const volumeIds = viewport.getAllVolumeIds();
  const volumes = volumeIds.map(id => cache.getVolume(id));
  const dynamicVolume = volumes.find(volume => volume.isDynamicVolume());
 
  return dynamicVolume ?? volumes[0];
}
 
/**
 * Return all viewports that needs to be synchronized with the source
 * viewport passed as parameter when cine is updated.
 * @param servicesManager ServiceManager
 * @param srcViewportIndex Source viewport index
 * @returns array with viewport information.
 */
function _getSyncedViewports(servicesManager: AppTypes.ServicesManager, srcViewportId) {
  const { viewportGridService, cornerstoneViewportService } = servicesManager.services;
 
  const { viewports: viewportsStates } = viewportGridService.getState();
  const srcViewportState = viewportsStates.get(srcViewportId);
 
  if (srcViewportState?.viewportOptions?.viewportType !== 'volume') {
    return [];
  }
 
  const srcViewport = cornerstoneViewportService.getCornerstoneViewport(srcViewportId);
 
  const srcVolume = srcViewport ? _getVolumeFromViewport(srcViewport) : null;
 
  if (!srcVolume?.isDynamicVolume()) {
    return [];
  }
 
  const { volumeId: srcVolumeId } = srcVolume;
 
  return Array.from(viewportsStates.values())
    .filter(({ viewportId }) => {
      const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
 
      return viewportId !== srcViewportId && viewport?.hasVolumeId?.(srcVolumeId);
    })
    .map(({ viewportId }) => ({ viewportId }));
}
 
function initCineService(servicesManager: AppTypes.ServicesManager) {
  const { cineService } = servicesManager.services;
 
  const getSyncedViewports = viewportId => {
    return _getSyncedViewports(servicesManager, viewportId);
  };
 
  const playClip = (element, playClipOptions) => {
    return utilities.cine.playClip(element, playClipOptions);
  };
 
  const stopClip = (element, stopClipOptions) => {
    return utilities.cine.stopClip(element, stopClipOptions);
  };
 
  cineService.setServiceImplementation({
    getSyncedViewports,
    playClip,
    stopClip,
  });
}
 
export default initCineService;