Files
zyrarbot/frontend/src/composables/useUploads.ts
T

49 lines
1.5 KiB
TypeScript

import { ref } from 'vue'
import { api } from '@/api/client'
import type { UploadedFile } from '@/types/status'
import { useToasts } from '@/composables/useToasts'
/** Ile plików pokazuje kafelek na pulpicie - reszta czeka w oknie modalnym. */
export const DASHBOARD_FILE_LIMIT = 10
const files = ref<UploadedFile[]>([])
const uploading = ref(false)
const uploadLabel = ref('')
/** Serwerowa baza plików współdzielona przez kafelek i okno z pełną listą. */
export function useUploads() {
const { notify, run } = useToasts()
async function refresh() {
try {
files.value = (await api.uploads()).files
} catch (error) {
console.error('Błąd pobierania plików:', error)
}
}
async function upload(selected: FileList) {
uploading.value = true
for (const file of Array.from(selected)) {
uploadLabel.value = `Przesyłanie: ${file.name}...`
await run(() => api.upload(file), `Przesłano plik: ${file.name}`, `Błąd przesyłania ${file.name}`)
}
uploading.value = false
uploadLabel.value = ''
await refresh()
}
async function remove(filename: string) {
if (await run(() => api.deleteUpload(filename), 'Usunięto plik z serwera', 'Nie udało się usunąć pliku')) {
await refresh()
}
}
async function enqueue(filename: string) {
await run(() => api.playFile(filename), '', 'Błąd odtwarzania')
await refresh()
}
return { files, uploading, uploadLabel, refresh, upload, remove, enqueue, notify }
}