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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 1x 1x 1x 1x 8x 8x 8x 8x 1x 8x 7x 7x 7x 8x 8x 8x | import PQueue from "p-queue"; import {Asset} from "../../photos-library/model/asset.js"; import {PLibraryProcessingQueues} from "../../photos-library/model/photos-entity.js"; import {SyncEngine} from "../sync-engine.js"; import * as SYNC_ENGINE from '../constants.js'; /** * Writes the asset changes defined in the processing queue to to disk (by downloading the asset or deleting it) * @param processingQueue - The asset processing queue * @returns A promise that settles, once all asset changes have been written to disk */ export async function writeAssets(this: SyncEngine, processingQueue: PLibraryProcessingQueues<Asset>) { const toBeDeleted = processingQueue[0]; const toBeAdded = processingQueue[1]; // Initializing sync queue this.downloadQueue = new PQueue({"concurrency": this.downloadCCY}); this.logger.debug(`Writing data by deleting ${toBeDeleted.length} assets and adding ${toBeAdded.length} assets`); // Deleting before downloading, in order to ensure no conflicts await Promise.all(toBeDeleted.map(asset => this.photosLibrary.deleteAsset(asset))); await Promise.all(toBeAdded.map(asset => this.downloadQueue.add(() => this.addAsset(asset)))); } /** * Downloads and stores a given asset, unless file is already present on disk * @param asset - The asset that needs to be downloaded * @returns A promise that resolves, once the file has been successfully written to disk */ export async function addAsset(this: SyncEngine, asset: Asset) { this.logger.info(`Adding asset ${asset.getDisplayName()}`); try { await this.photosLibrary.verifyAsset(asset); this.logger.debug(`Asset ${asset.getDisplayName()} already downloaded`); } catch (err) { const data = await this.icloud.photos.downloadAsset(asset); await this.photosLibrary.writeAsset(asset, data); } this.emit(SYNC_ENGINE.EVENTS.WRITE_ASSET_COMPLETED, asset.getDisplayName()); } |