Files
wgenerator/src/app/modules/songs/services/upload.service.ts
2026-03-09 22:56:31 +01:00

44 lines
1.3 KiB
TypeScript

import {Injectable, inject} from '@angular/core';
import {Upload} from './upload';
import {FileDataService} from './file-data.service';
import {ref, Storage, uploadBytesResumable} from '@angular/fire/storage';
import {FileBase} from './fileBase';
import {FileServer} from './fileServer';
@Injectable({
providedIn: 'root',
})
export class UploadService extends FileBase {
private fileDataService = inject(FileDataService);
private storage = inject(Storage);
public pushUpload(songId: string, upload: Upload): void {
const directory = this.directory(songId);
const filePath = `${directory}/${upload.file.name}`;
upload.path = directory;
const storageRef = ref(this.storage, filePath);
const task = uploadBytesResumable(storageRef, upload.file);
task.on(
'state_changed',
snapshot => {
upload.progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
},
() => {
// Keep current UX: upload errors are ignored by this service.
},
() => void this.saveFileData(songId, upload)
);
}
private async saveFileData(songId: string, upload: Upload) {
const file: FileServer = {
name: upload.file.name,
path: upload.path,
createdAt: new Date(),
};
await this.fileDataService.set(songId, file);
}
}