mp3db / static /script.js
Sergidev's picture
Update static/script.js
5b85603 verified
document.addEventListener('DOMContentLoaded', () => {
const dropArea = document.getElementById('drop-area');
const fileInput = document.getElementById('fileInput');
const options = document.getElementById('options');
const multiplicationFactor = document.getElementById('multiplicationFactor');
const factorValue = document.getElementById('factorValue');
const processButton = document.getElementById('processButton');
const result = document.getElementById('result');
const audioPlayer = document.getElementById('audioPlayer');
const downloadLink = document.getElementById('downloadLink');
let isDecrypting = false;
let currentFile = null;
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, preventDefaults, false);
});
function preventDefaults(e) {
e.preventDefault();
e.stopPropagation();
}
['dragenter', 'dragover'].forEach(eventName => {
dropArea.addEventListener(eventName, highlight, false);
});
['dragleave', 'drop'].forEach(eventName => {
dropArea.addEventListener(eventName, unhighlight, false);
});
function highlight() {
dropArea.classList.add('highlight');
}
function unhighlight() {
dropArea.classList.remove('highlight');
}
dropArea.addEventListener('drop', handleDrop, false);
function handleDrop(e) {
const dt = e.dataTransfer;
const files = dt.files;
handleFiles(files);
}
fileInput.addEventListener('change', function() {
handleFiles(this.files);
});
function handleFiles(files) {
if (files.length > 0) {
currentFile = files[0];
isDecrypting = currentFile.type === 'audio/mpeg';
options.style.display = 'block';
processButton.textContent = isDecrypting ? 'Decrypt' : 'Encrypt';
dropArea.textContent = `File selected: ${currentFile.name}`;
}
}
processButton.addEventListener('click', function() {
if (!currentFile) {
alert('Please select a file first.');
return;
}
const formData = new FormData();
formData.append('file', currentFile);
formData.append('factor', multiplicationFactor.value);
fetch('/process', {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) {
return response.json().then(err => { throw new Error(err.error || 'Unknown error occurred') });
}
return response.blob();
})
.then(blob => {
if (blob.size === 0) {
throw new Error('Received empty file from server');
}
const url = URL.createObjectURL(blob);
result.style.display = 'block';
if (isDecrypting) {
audioPlayer.style.display = 'none';
downloadLink.textContent = 'Download Decrypted File';
} else {
audioPlayer.style.display = 'block';
audioPlayer.src = url;
downloadLink.textContent = 'Download Encrypted MP3';
}
downloadLink.href = url;
downloadLink.download = isDecrypting ? 'decrypted_file' : 'encrypted.mp3';
console.log('File processed successfully. Size:', blob.size, 'bytes');
})
.catch(error => {
console.error('Error:', error);
alert('An error occurred while processing the file: ' + error.message);
});
});
});