- Fix WebDAV service to find all 4,101 MP3 files instead of 1,023 - Add support for AIFF files (.aif, .aiff) in audio detection - Update audioMetadataService to recognize AIFF formats - Simplify BackgroundJobProgress component polling logic - Add maxDepth parameter to WebDAV directory listing - Add comprehensive test scripts for debugging WebDAV integration The WebDAV integration now correctly processes all 4,257 audio files from the music collection, including 4,101 MP3 files and 156 other audio formats (FLAC, WAV, AIFF, M4A, OGG).
117 lines
4.3 KiB
JavaScript
117 lines
4.3 KiB
JavaScript
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);
|