Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 10x 10x 10x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 10x 5x 5x 10x 2x 2x 2x 3x 3x 3x 3x 1x 1x 1x 1x 3x 2x 2x 2x 3x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 12x 6x 6x 12x 12x 12x 3x 3x | /**
* API pour gérer les fichiers de test
*/
export interface TestFileInfo {
name: string
size: number
type: string
lastModified: number
}
/**
* Récupère la liste des fichiers disponibles dans le dossier test-files
*/
export async function getTestFilesList(): Promise<TestFileInfo[]> {
try {
// En mode développement, on peut utiliser une API pour lister les fichiers
// Pour l'instant, on utilise une approche simple avec les fichiers connus
const knownFiles = [
'IMG_20250902_162159.jpg',
'IMG_20250902_162210.jpg',
'sample.md',
'sample.pdf',
'sample.txt'
]
const files: TestFileInfo[] = []
for (const fileName of knownFiles) {
try {
const response = await fetch(`/test-files/${fileName}`, { method: 'HEAD' })
if (response.ok) {
const contentLength = response.headers.get('content-length')
const contentType = response.headers.get('content-type')
const lastModified = response.headers.get('last-modified')
files.push({
name: fileName,
size: contentLength ? parseInt(contentLength, 10) : 0,
type: contentType || 'application/octet-stream',
lastModified: lastModified ? new Date(lastModified).getTime() : Date.now()
})
}
} catch (error) {
console.warn(`Impossible de vérifier le fichier ${fileName}:`, error)
}
}
return files
} catch (error) {
console.error('Erreur lors de la récupération de la liste des fichiers de test:', error)
return []
}
}
/**
* Charge un fichier de test par son nom
*/
export async function loadTestFile(fileName: string): Promise<File | null> {
try {
const response = await fetch(`/test-files/${fileName}`)
if (!response.ok) {
throw new Error(`Fichier non trouvé: ${fileName}`)
}
const blob = await response.blob()
return new File([blob], fileName, { type: blob.type })
} catch (error) {
console.error(`Erreur lors du chargement du fichier ${fileName}:`, error)
return null
}
}
/**
* Filtre les fichiers par type MIME supporté
*/
export function filterSupportedFiles(files: TestFileInfo[]): TestFileInfo[] {
const supportedTypes = [
'application/pdf',
'image/jpeg',
'image/jpg',
'image/png',
'image/tiff',
'text/plain',
'text/markdown',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
]
return files.filter(file => {
// Vérifier le type MIME
if (supportedTypes.includes(file.type)) {
return true
}
// Vérifier l'extension si le type MIME n'est pas fiable
const extension = file.name.split('.').pop()?.toLowerCase()
const supportedExtensions = ['pdf', 'jpg', 'jpeg', 'png', 'tiff', 'txt', 'md', 'docx']
return extension && supportedExtensions.includes(extension)
})
}
|