-
Notifications
You must be signed in to change notification settings - Fork 6
/
dia-backend-asset-prefetching.service.ts
47 lines (44 loc) · 1.55 KB
/
dia-backend-asset-prefetching.service.ts
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
import { Injectable } from '@angular/core';
import { MediaStore } from '../../../media/media-store/media-store.service';
import { DiaBackendAssetRepository } from '../dia-backend-asset-repository.service';
import { DiaBackendAssetDownloadingService } from '../downloading/dia-backend-downloading.service';
@Injectable({
providedIn: 'root',
})
export class DiaBackendAssetPrefetchingService {
constructor(
private readonly assetRepository: DiaBackendAssetRepository,
private readonly downloadingService: DiaBackendAssetDownloadingService,
private readonly mediaStore: MediaStore
) {}
async prefetch(
onStored: (currentCount: number, totalCount: number) => any = () => void 0
) {
let currentOffset = 0;
let currentCount = 0;
const limit = 100;
while (true) {
const { results: diaBackendAssets, count: totalCount } =
await this.assetRepository
.fetchOriginallyOwned$({ offset: currentOffset, limit })
.toPromise();
if (diaBackendAssets.length === 0) {
break;
}
await Promise.all(
diaBackendAssets.map(async diaBackendAsset => {
if (diaBackendAsset.source_transaction === null)
await this.downloadingService.storeRemoteCapture(
diaBackendAsset,
(await this.mediaStore.getThumbnail(
diaBackendAsset.proof_hash
)) === undefined
);
currentCount += 1;
onStored(currentCount, totalCount);
})
);
currentOffset += diaBackendAssets.length;
}
}
}