async _handleDirectoryDownload(normalizedPath, realPath, filePath, tmpPath, files, peerToUse) {
		logT('transfer', 'Received directory listing', files.length, 'files');
		
		// Create directory structure
		try {
			await mkdirp(tmpPath);
			await mkdirp(filePath);
		} catch (err) {
			logTE('transfer', 'Error creating directory structure', err);
			return false;
		}
		
		if (files.length === 0) {
			// Empty directory, just consider it done
			logT('transfer', 'Directory is empty', normalizedPath);
			return true;
		}
		
		// Transfer all files in directory with batched concurrency
		const transferPromises = files.map(relativeFile => {
			// Join paths properly
			const fullPath = normalizedPath.endsWith('/') ? 
				normalizedPath + relativeFile : 
				`${normalizedPath}/${relativeFile}`;
			
			// Calculate target path
			const fileTargetPath = ph.join(realPath, relativeFile).replace(/\\/g, '/');
			
			return this.file(fullPath, fileTargetPath, peerToUse, true);
		});
		
		// Process in batches to limit concurrency
		const batchSize = 5;
		const results = [];
		
		for (let i = 0; i < transferPromises.length; i += batchSize) {
			const batch = transferPromises.slice(i, i + batchSize);
			const batchResults = await Promise.all(batch);
			results.push(...batchResults);
		}
		
		// Process rename callbacks for files that need it
		const renameResults = await Promise.all(
			results.filter(Boolean).map(renameCallback => 
				typeof renameCallback === 'function' ? renameCallback() : true
			)
		);
		
		// Check if all transfers were successful
		if (renameResults.every(Boolean)) {
			logT('transfer', 'Successfully transferred all files from directory', normalizedPath);
			
			// Delete the temporary directory after all files are renamed
			try {
				// Use recursive option to remove directory with contents
				fs.rmSync(tmpPath, { recursive: true, force: true });
				logT('transfer', 'Successfully removed temporary directory', tmpPath);
			} catch (err) {
				logTE('transfer', 'Error removing temporary directory', tmpPath, err);
				// Continue even if tmp directory removal fails
			}
			
			return true;
		} else {
			const failedCount = renameResults.filter(r => !r).length;
			logTE('transfer', `${failedCount}/${files.length} files failed to transfer from directory ${normalizedPath}`);
			return false;
		}
	}
Handle directory download
@param {string} normalizedPath - Normalized directory path
@param {string} realPath - Real directory path
@param {string} filePath - Final directory path
@param {string} tmpPath - Temporary directory path
@param {string[]} files - Directory files list
@param {string} peerToUse - Peer ID to download from
@returns {Promise<boolean|Function>} Success or rename callback
@private