Skip to content

Commit b491ed3

Browse files
authored
Merge pull request #4253 from tdonohue/port_4212_to_7x
[Port dspace-7_x] Fix: prevent bitstream format cache issue by disabling cached version
2 parents 02f30ab + b184db7 commit b491ed3

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

src/app/core/data/bitstream-data.service.spec.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import objectContaining = jasmine.objectContaining;
2222
import { RemoteData } from './remote-data';
2323
import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
2424
import { RequestParam } from '../cache/models/request-param.model';
25+
import { RestResponse } from '../cache/response.models';
26+
import { RequestEntry } from './request-entry.model';
2527

2628
describe('BitstreamDataService', () => {
2729
let service: BitstreamDataService;
@@ -31,6 +33,7 @@ describe('BitstreamDataService', () => {
3133
let bitstreamFormatService: BitstreamFormatDataService;
3234
let rdbService: RemoteDataBuildService;
3335
const bitstreamFormatHref = 'rest-api/bitstreamformats';
36+
let responseCacheEntry: RequestEntry;
3437

3538
const bitstream1 = Object.assign(new Bitstream(), {
3639
id: 'fake-bitstream1',
@@ -55,8 +58,13 @@ describe('BitstreamDataService', () => {
5558
const url = 'fake-bitstream-url';
5659

5760
beforeEach(() => {
61+
responseCacheEntry = new RequestEntry();
62+
responseCacheEntry.request = { href: 'https://rest.api/' } as any;
63+
responseCacheEntry.response = new RestResponse(true, 200, 'Success');
64+
5865
objectCache = jasmine.createSpyObj('objectCache', {
59-
remove: jasmine.createSpy('remove')
66+
remove: jasmine.createSpy('remove'),
67+
getByHref: observableOf(responseCacheEntry),
6068
});
6169
requestService = getMockRequestService();
6270
halService = Object.assign(new HALEndpointServiceStub(url));

src/app/core/data/bitstream-data.service.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,25 @@ export class BitstreamDataService extends IdentifiableDataService<Bitstream> imp
137137
sendRequest(this.requestService),
138138
take(1)
139139
).subscribe(() => {
140-
this.requestService.removeByHrefSubstring(bitstream.self + '/format');
140+
this.deleteFormatCache(bitstream);
141141
});
142-
143142
return this.rdbService.buildFromRequestUUID(requestId);
144143
}
145144

145+
private deleteFormatCache(bitstream: Bitstream) {
146+
const bitsreamFormatUrl = bitstream.self + '/format';
147+
this.requestService.setStaleByHrefSubstring(bitsreamFormatUrl);
148+
// Delete also cache by uuid as the format could be cached also there
149+
this.objectCache.getByHref(bitsreamFormatUrl).pipe(take(1)).subscribe((cachedRequest) => {
150+
if (cachedRequest.requestUUIDs && cachedRequest.requestUUIDs.length > 0){
151+
const requestUuid = cachedRequest.requestUUIDs[0];
152+
if (this.requestService.hasByUUID(requestUuid)) {
153+
this.requestService.setStaleByUUID(requestUuid);
154+
}
155+
}
156+
});
157+
}
158+
146159
/**
147160
* Returns an observable of {@link RemoteData} of a {@link Bitstream}, based on a handle and an
148161
* optional sequenceId or filename, with a list of {@link FollowLinkConfig}, to automatically

src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ export class ItemEditBitstreamBundleComponent implements OnInit, OnDestroy {
203203
switchMap(() => this.bundleService.getBitstreams(
204204
this.bundle.id,
205205
paginatedOptions,
206-
followLink('format')
207-
))
206+
followLink('format'),
207+
)),
208208
);
209209
}),
210210
getAllSucceededRemoteData(),

0 commit comments

Comments
 (0)