Skip to content

Commit 1a7d575

Browse files
feat: add cache status for loadAndCache (#356)
* feat: add cache status for loadAndCache * fix: tag & f * Update docs --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 5416519 commit 1a7d575

File tree

11 files changed

+50
-13
lines changed

11 files changed

+50
-13
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
## Dicom Image Toolkit for CornerstoneJS
1010

11-
### Current version: 2.5.0
11+
### Current version: 2.5.1
1212

13-
### Latest Published Release: 2.5.0
13+
### Latest Published Release: 2.5.1
1414

1515
This library provides common DICOM functionalities to be used in web-applications: it's wrapper that simplifies the use of cornerstone-js environment.
1616

dist/imaging/imageStore.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ type StoreSeries = {
77
imageIds: string[];
88
progress: number;
99
elementId: string;
10+
cached: {
11+
[imageId: string]: boolean;
12+
};
1013
};
1114
type Store = {
1215
colormapId: string;
@@ -29,7 +32,7 @@ type SetPayload = ["errorLog" | "leftActiveTool" | "rightActiveTool", string] |
2932
("progress" | "loading" | "minPixelValue" | "maxPixelValue" | "minSliceId" | "maxSliceId" | "minTimeId" | "maxTimeId" | "rotation" | "scale" | "sliceId" | "timeId" | "thickness" | "numberOfFrames" | "numberOfTemporalPositions"),
3033
string,
3134
number
32-
] | ["timestamp", string, number | undefined] | ["seriesUID" | "modality", string, string | undefined] | ["pendingSliceId", string, number | undefined] | ["timestamps" | "timeIds" | "pixelShift", string, number[]] | [
35+
] | ["cached", string, string, boolean] | ["timestamp", string, number | undefined] | ["seriesUID" | "modality", string, string | undefined] | ["pendingSliceId", string, number | undefined] | ["timestamps" | "timeIds" | "pixelShift", string, number[]] | [
3336
"contrast" | "dimensions" | "spacing" | "translation",
3437
string,
3538
number,

dist/larvitar.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/larvitar.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/documentation/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ <h3> </h3>
7474
<h1 id="larvitar">Larvitar</h1>
7575
<p><a href="https://github.com/dvisionlab/Larvitar"><img src="https://img.shields.io/badge/dynamic/json.svg?label=type-coverage&amp;prefix=%E2%89%A5&amp;suffix=%25&amp;query=$.typeCoverage.atLeast&amp;uri=https%3A%2F%2Fraw.githubusercontent.com%2Fplantain-00%2Ftype-coverage%2Fmaster%2Fpackage.json" alt="type-coverage"></a></p>
7676
<h2 id="dicom-image-toolkit-for-cornerstonejs">Dicom Image Toolkit for CornerstoneJS</h2>
77-
<h3 id="current-version%3A-2.5.0">Current version: 2.5.0</h3>
78-
<h3 id="latest-published-release%3A-2.5.0">Latest Published Release: 2.5.0</h3>
77+
<h3 id="current-version%3A-2.5.1">Current version: 2.5.1</h3>
78+
<h3 id="latest-published-release%3A-2.5.1">Latest Published Release: 2.5.1</h3>
7979
<p>This library provides common DICOM functionalities to be used in web-applications: it's wrapper that simplifies the use of cornerstone-js environment.</p>
8080
<h2 id="features%3A">Features:</h2>
8181
<ul>

docs/examples/larvitar.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

imaging/imageParsing.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ const parseFile = function (file: File) {
460460
const positionerSecondaryAngle = metadata["x00181511"]
461461
? metadata["x00181511"]
462462
: 0;
463+
imageObject.metadata.biplane = {};
463464
imageObject.metadata.biplane.tag = tag;
464465
imageObject.metadata.biplane.referencedSOPInstanceUID =
465466
referencedSOPInstanceUID;

imaging/imageRendering.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export function loadAndCacheImage(
106106
//check if it is a metadata-only object
107107
if (imageId && series.instances[imageId].metadata.pixelDataLength != 0) {
108108
cornerstone.loadAndCacheImage(imageId).then(function () {
109+
setStore(["cached", series.larvitarSeriesInstanceUID, imageId, true]);
109110
const t1 = performance.now();
110111
console.debug(`Call to cacheImages took ${t1 - t0} milliseconds.`);
111112
console.debug(
@@ -170,6 +171,7 @@ export function loadAndCacheImages(
170171
//check if it is a metadata-only object
171172
if (imageId && series.instances[imageId].metadata.pixelDataLength != 0) {
172173
cornerstone.loadAndCacheImage(imageId).then(function () {
174+
setStore(["cached", series.larvitarSeriesInstanceUID, imageId, true]);
173175
updateProgress();
174176
callback(response);
175177
});
@@ -698,7 +700,7 @@ export const updateImage = async function (
698700
);
699701
}
700702
}
701-
703+
setStore(["cached", series.larvitarSeriesInstanceUID, imageId, true]);
702704
setStore(["sliceId", id, imageIndex]);
703705
const pendingSliceId = store.get(["viewports", id, "pendingSliceId"]);
704706
if (imageIndex == pendingSliceId) {

imaging/imageStore.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
import { get as _get, cloneDeep as _cloneDeep } from "lodash";
88
import type { StoreViewport } from "./types.d";
99

10-
type StoreSeries = { imageIds: string[]; progress: number; elementId: string };
10+
type StoreSeries = {
11+
imageIds: string[];
12+
progress: number;
13+
elementId: string;
14+
cached: { [imageId: string]: boolean };
15+
};
1116

1217
type Store = {
1318
colormapId: string;
@@ -57,6 +62,7 @@ type SetPayload =
5762
string,
5863
number
5964
]
65+
| ["cached", string, string, boolean]
6066
| ["timestamp", string, number | undefined]
6167
| ["seriesUID" | "modality", string, string | undefined]
6268
| ["pendingSliceId", string, number | undefined]
@@ -201,6 +207,15 @@ const setValue = (store: Store, data: SetPayload) => {
201207
triggerSeriesListener(k);
202208
break;
203209

210+
case "cached":
211+
if (!store.series[k]) {
212+
return;
213+
}
214+
v = v as [string, boolean];
215+
store.series[k][field][v[0]] = v[1];
216+
triggerSeriesListener(k);
217+
break;
218+
204219
case "seriesUID":
205220
if (!viewport) {
206221
return;
@@ -415,6 +430,11 @@ export default {
415430
STORE!.series[seriesId] = {} as StoreSeries;
416431
}
417432
STORE!.series[seriesId].imageIds = imageIds;
433+
// for each imageId create a cached[imageId] = false
434+
STORE!.series[seriesId].cached = {};
435+
imageIds.forEach(imageId => {
436+
STORE!.series[seriesId].cached[imageId] = false;
437+
});
418438
triggerSeriesListener(seriesId);
419439
},
420440
removeSeriesId: (seriesId: string) => {

imaging/loaders/dicomLoader.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import cornerstone from "cornerstone-core";
88

99
// internal libraries
1010
import { loadAndCacheImage, loadAndCacheImages } from "../imageRendering";
11-
import store from "../imageStore";
11+
import store, { set as setStore } from "../imageStore";
1212
import type { Series, CachingResponse } from "../types";
1313

1414
/*
@@ -85,6 +85,12 @@ export const loadAndCacheImageStack = async function (
8585
imageId &&
8686
seriesData.instances[imageId].metadata.pixelDataLength != 0
8787
) {
88+
setStore([
89+
"cached",
90+
seriesData.larvitarSeriesInstanceUID,
91+
imageId,
92+
true
93+
]);
8894
return cornerstone.loadAndCacheImage(imageId);
8995
} else {
9096
return Promise.resolve(undefined); // Return a resolved Promise with undefined
@@ -150,7 +156,12 @@ export const loadAndCacheDsaImageStack = async function (
150156
if (forceRecache) {
151157
cornerstone.imageCache.removeImageLoadObject(imageId);
152158
}
153-
159+
setStore([
160+
"cached",
161+
seriesData.larvitarSeriesInstanceUID,
162+
imageId,
163+
true
164+
]);
154165
return cornerstone.loadAndCacheImage(imageId);
155166
});
156167
Promise.all(dsaPromises).then(() => {

0 commit comments

Comments
 (0)