import { createClient } from 'webdav'; import fs from 'fs'; async function debugMP3Files() { try { // Load configuration const configData = fs.readFileSync('storage-config.json', 'utf-8'); const config = JSON.parse(configData); console.log('🔍 WebDAV Configuration:'); console.log('URL:', config.url); console.log('Username:', config.username); console.log('Base Path:', config.basePath); console.log(''); // Create WebDAV client const client = createClient(config.url, { username: config.username, password: config.password, }); console.log('🔗 Testing connection...'); const basePath = config.basePath || '/Music'; try { // Test deep listing console.log('📁 Testing deep directory listing for MP3 files...'); const deepContents = await client.getDirectoryContents(basePath, { deep: true }); console.log('Deep listing response type:', typeof deepContents); console.log('Is array:', Array.isArray(deepContents)); if (Array.isArray(deepContents)) { console.log('Total items found:', deepContents.length); // Filter for MP3 files specifically const mp3Files = deepContents.filter(item => { if (item && typeof item === 'object' && 'type' in item && item.type === 'file') { const filename = item.basename || item.filename.split('/').pop() || ''; return filename.toLowerCase().endsWith('.mp3'); } return false; }); console.log('🎵 MP3 Files found:', mp3Files.length); console.log(''); // Show first 20 MP3 files console.log('🎵 First 20 MP3 files:'); mp3Files.slice(0, 20).forEach((file, index) => { const relativePath = file.filename.replace(basePath + '/', ''); console.log(` ${index + 1}. ${relativePath} (${file.size} bytes)`); }); if (mp3Files.length > 20) { console.log(` ... and ${mp3Files.length - 20} more MP3 files`); } // Check if there are any patterns in the file paths console.log(''); console.log('📁 Directory distribution of MP3 files:'); const dirCounts = new Map(); mp3Files.forEach(file => { const relativePath = file.filename.replace(basePath + '/', ''); const dir = relativePath.split('/')[0]; dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1); }); const sortedDirs = Array.from(dirCounts.entries()).sort((a, b) => b[1] - a[1]); sortedDirs.forEach(([dir, count]) => { console.log(` 📁 ${dir}: ${count} MP3 files`); }); // Test if there's a limit by checking specific directories console.log(''); console.log('🔍 Testing specific directories for MP3 files...'); const testDirs = ['Gekocht', 'Merijn Music', 'Musica']; for (const testDir of testDirs) { try { const dirPath = `${basePath}/${testDir}`; const dirContents = await client.getDirectoryContents(dirPath, { deep: true }); const dirItems = Array.isArray(dirContents) ? dirContents : [dirContents]; const dirMp3Files = dirItems.filter(item => { if (item && typeof item === 'object' && 'type' in item && item.type === 'file') { const filename = item.basename || item.filename.split('/').pop() || ''; return filename.toLowerCase().endsWith('.mp3'); } return false; }); console.log(` 📁 ${testDir}: ${dirMp3Files.length} MP3 files`); } catch (error) { console.log(` ❌ ${testDir}: Error - ${error.message}`); } } } else { console.log('❌ Deep listing returned non-array response:', deepContents); } } catch (error) { console.error('❌ Error during WebDAV operations:', error); console.error('Error details:', error.message); if (error.response) { console.error('Response status:', error.response.status); console.error('Response data:', error.response.data); } } } catch (error) { console.error('❌ Failed to load configuration or create client:', error); } } // Run the debug function debugMP3Files().catch(console.error);