import { open } from "@tauri-apps/plugin-dialog" import { AlertCircle, FolderOpen, Loader2 } from "lucide-react" import { useState } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Progress } from "@/components/ui/progress" import type { MediaFile } from "@/features/media/types/media" import { useMediaProcessor } from "../hooks/use-media-processor" export function MediaScanner() { const [scannedFiles, setScannedFiles] = useState([]) const [selectedFolder, setSelectedFolder] = useState(null) const { scanFolderWithThumbnails, isProcessing, progress, errors, clearErrors } = useMediaProcessor({ onFilesDiscovered: (files) => { console.log(`Обнаружено ${files.length} файлов`) }, onMetadataReady: (fileId, metadata) => { console.log(`Метаданные готовы для файла ${fileId}:`, metadata) }, onThumbnailReady: (fileId, thumbnailPath, thumbnailData) => { console.log(`Превью готово для файла ${fileId}: ${thumbnailPath}`) if (thumbnailData) { console.log(`Base64 данные превью доступны (${thumbnailData.length} символов)`) } }, onError: (fileId, error) => { console.error(`Ошибка обработки файла ${fileId}:`, error) }, onProgress: (current, total) => { console.log(`Прогресс: ${current}/${total}`) }, }) const handleSelectFolder = async () => { const selected = await open({ directory: true, multiple: false, title: "Выберите папку для сканирования", }) if (selected) { setSelectedFolder(selected) clearErrors() } } const handleScan = async () => { if (!selectedFolder) return try { const files = await scanFolderWithThumbnails(selectedFolder, 320, 180) setScannedFiles(files) console.log(`Сканирование завершено. Обработано файлов: ${files.length}`) } catch (error) { console.error("Ошибка сканирования:", error) } } const progressPercentage = progress.total > 0 ? (progress.current / progress.total) * 100 : 0 return ( Сканирование медиафайлов Выберите папку для асинхронного сканирования и обработки медиафайлов
{selectedFolder &&
Выбрана папка: {selectedFolder}
} {isProcessing && progress.total > 0 && (
Обработка файлов {progress.current} / {progress.total}
)} {errors.size > 0 && (
Ошибки при обработке ({errors.size})
{Array.from(errors.entries()).map(([fileId, error]) => (
{fileId}: {error}
))}
)} {scannedFiles.length > 0 && (

Обработано файлов: {scannedFiles.length}

    {scannedFiles.map((file) => (
  • {file.name} {file.isVideo && "Видео"} {file.isImage && "Изображение"} {file.isAudio && "Аудио"} {file.duration && ` (${Math.round(file.duration)}с)`}
  • ))}
)}
) }