49 lines
1.5 KiB
TypeScript
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 }
|
|
}
|