@@ -714,6 +714,85 @@ class CornerstoneViewport extends Component {
714
714
this . setViewportActive ( ) ;
715
715
716
716
scrollToIndex ( this . element , value ) ;
717
+
718
+ this . resetPrefetching ( value ) ;
719
+ } ;
720
+
721
+ resetPrefetching = imageIdIndex => {
722
+ cornerstoneTools . stackPrefetch . setConfiguration ( {
723
+ maxImagesToPrefetch : Infinity ,
724
+ preserveExistingPool : false ,
725
+ maxSimultaneousRequests : 6 ,
726
+ } ) ;
727
+
728
+ const { imageIds } = this . props ;
729
+
730
+ const minImageIdIndex = 0 ;
731
+ const maxImageIdIndex = imageIds . length - 1 ;
732
+
733
+ let lowerImageIdIndex = imageIdIndex ;
734
+ let upperImageIdIndex = imageIdIndex ;
735
+
736
+ // Build up an array of images to prefetch, starting with the current image.
737
+ let imageIdsToPrefetch = [ imageIds [ imageIdIndex ] ] ;
738
+
739
+ // 0: From current stack position down to minimum.
740
+ // 1: From current stack position up to maximum.
741
+
742
+ const prefetchQueuedFilled = [ false , false ] ;
743
+
744
+ // Check if on edges and some criteria is already fulfilled
745
+
746
+ if ( imageIdIndex === minImageIdIndex ) {
747
+ prefetchQueuedFilled [ 0 ] = true ;
748
+ } else if ( imageIdIndex === maxImageIdIndex ) {
749
+ prefetchQueuedFilled [ 1 ] = true ;
750
+ }
751
+
752
+ while (
753
+ prefetchQueuedFilled [ 0 ] === false ||
754
+ prefetchQueuedFilled [ 1 ] === false
755
+ ) {
756
+ if ( prefetchQueuedFilled [ 0 ] === false ) {
757
+ // Add imageId bellow
758
+ lowerImageIdIndex -- ;
759
+ imageIdsToPrefetch . push ( imageIds [ lowerImageIdIndex ] ) ;
760
+
761
+ if ( lowerImageIdIndex === minImageIdIndex ) {
762
+ prefetchQueuedFilled [ 0 ] = true ;
763
+ }
764
+ }
765
+
766
+ if ( prefetchQueuedFilled [ 1 ] === false ) {
767
+ // Add imageId above
768
+ upperImageIdIndex ++ ;
769
+ imageIdsToPrefetch . push ( imageIds [ upperImageIdIndex ] ) ;
770
+
771
+ if ( upperImageIdIndex === maxImageIdIndex ) {
772
+ prefetchQueuedFilled [ 1 ] = true ;
773
+ }
774
+ }
775
+ }
776
+
777
+ const requestPoolManager = cornerstoneTools . requestPoolManager ;
778
+ const requestType = 'prefetch' ;
779
+ const preventCache = false ;
780
+ const noop = ( ) => { } ;
781
+
782
+ requestPoolManager . clearRequestStack ( 'prefetch' ) ;
783
+
784
+ imageIdsToPrefetch . forEach ( imageId => {
785
+ requestPoolManager . addRequest (
786
+ { } ,
787
+ imageId ,
788
+ requestType ,
789
+ preventCache ,
790
+ noop ,
791
+ noop
792
+ ) ;
793
+ } ) ;
794
+
795
+ requestPoolManager . startGrabbing ( ) ;
717
796
} ;
718
797
719
798
setViewportActive = ( ) => {
0 commit comments