(
telemetry: ProtonDriveTelemetry,
apiService: DriveAPIService,
driveCrypto: DriveCrypto,
sharesService: SharesService,
nodesService: NodesService,
featureFlagProvider: FeatureFlagProvider,
clientUid?: string,
allowSmallFileUpload: boolean = true,
)
| 20 | * and verifications. |
| 21 | */ |
| 22 | export function initUploadModule( |
| 23 | telemetry: ProtonDriveTelemetry, |
| 24 | apiService: DriveAPIService, |
| 25 | driveCrypto: DriveCrypto, |
| 26 | sharesService: SharesService, |
| 27 | nodesService: NodesService, |
| 28 | featureFlagProvider: FeatureFlagProvider, |
| 29 | clientUid?: string, |
| 30 | allowSmallFileUpload: boolean = true, |
| 31 | ) { |
| 32 | const api = new UploadAPIService(apiService, clientUid); |
| 33 | const cryptoService = new UploadCryptoService(telemetry, driveCrypto, nodesService); |
| 34 | |
| 35 | const uploadTelemetry = new UploadTelemetry(telemetry, sharesService); |
| 36 | const manager = new UploadManager(telemetry, api, cryptoService, nodesService, clientUid); |
| 37 | |
| 38 | const queue = new UploadQueue(); |
| 39 | |
| 40 | async function shouldUseSmallFileUpload(expectedSize: number): Promise<boolean> { |
| 41 | const isEnabled = |
| 42 | allowSmallFileUpload && (await featureFlagProvider.isEnabled(FeatureFlags.DriveSmallFileUpload)); |
| 43 | if (!isEnabled) { |
| 44 | return false; |
| 45 | } |
| 46 | return expectedSize < SMALL_FILE_SIZE_LIMIT; |
| 47 | } |
| 48 | |
| 49 | /** |
| 50 | * Returns a FileUploader instance that can be used to upload a file to |
| 51 | * a parent folder. |
| 52 | * |
| 53 | * This operation does not call the API, it only returns a FileUploader |
| 54 | * instance when the upload queue has capacity. |
| 55 | */ |
| 56 | async function getFileUploader( |
| 57 | parentFolderUid: string, |
| 58 | name: string, |
| 59 | metadata: UploadMetadata, |
| 60 | signal?: AbortSignal, |
| 61 | ): Promise<FileUploader> { |
| 62 | await queue.waitForCapacity(metadata.expectedSize, signal); |
| 63 | |
| 64 | const onFinish = () => { |
| 65 | queue.releaseCapacity(metadata.expectedSize); |
| 66 | }; |
| 67 | |
| 68 | return new FileUploaderClass( |
| 69 | uploadTelemetry, |
| 70 | api, |
| 71 | cryptoService, |
| 72 | manager, |
| 73 | parentFolderUid, |
| 74 | name, |
| 75 | metadata, |
| 76 | onFinish, |
| 77 | shouldUseSmallFileUpload, |
| 78 | signal, |
| 79 | ); |
no outgoing calls
no test coverage detected