fix upload multi
This commit is contained in:
@@ -27,10 +27,18 @@ export class ModalManager {
|
||||
this.newFolderModal = new bootstrap.Modal(document.getElementById('newFolderModal'));
|
||||
this.renameModal = new bootstrap.Modal(document.getElementById('renameModal'));
|
||||
this.detailsModal = new bootstrap.Modal(document.getElementById('detailsModal'));
|
||||
this.overwriteModal = new bootstrap.Modal(document.getElementById('overwriteConfirmModal'), {
|
||||
backdrop: 'static',
|
||||
keyboard: false
|
||||
});
|
||||
|
||||
// Initialize overwrite modal with static backdrop and keyboard disabled
|
||||
const overwriteModalEl = document.getElementById('overwriteConfirmModal');
|
||||
if (!overwriteModalEl) {
|
||||
console.error('[ModalManager] Overwrite modal element not found');
|
||||
} else {
|
||||
this.overwriteModal = new bootstrap.Modal(overwriteModalEl, {
|
||||
backdrop: 'static',
|
||||
keyboard: false
|
||||
});
|
||||
}
|
||||
|
||||
this.moveModal = new bootstrap.Modal(document.getElementById('moveModal'));
|
||||
|
||||
this.initializeModals();
|
||||
@@ -225,30 +233,109 @@ export class ModalManager {
|
||||
|
||||
/**
|
||||
* Shows the overwrite confirmation modal.
|
||||
* @param {string} filename - The name of the file that would be overwritten
|
||||
* @param {string} fileName - The name of the file that would be overwritten
|
||||
* @returns {Promise<string>} A promise that resolves with the user's choice ('skip', 'skip_all', 'overwrite', or 'overwrite_all')
|
||||
*/
|
||||
showOverwriteModal(filename) {
|
||||
showOverwriteModal(fileName) {
|
||||
console.log('[ModalManager] Showing overwrite modal for:', fileName);
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const fileNameEl = document.getElementById('overwriteFileName');
|
||||
if (fileNameEl) fileNameEl.textContent = filename;
|
||||
// Get the modal element
|
||||
const modalEl = document.getElementById('overwriteConfirmModal');
|
||||
if (!modalEl) {
|
||||
console.error('[ModalManager] Overwrite modal element not found');
|
||||
resolve('skip');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('[ModalManager] Modal element found:', modalEl);
|
||||
|
||||
// Initialize the modal if it hasn't been initialized
|
||||
if (!this.overwriteModal) {
|
||||
console.log('[ModalManager] Initializing new modal instance');
|
||||
this.overwriteModal = new bootstrap.Modal(modalEl, {
|
||||
backdrop: 'static',
|
||||
keyboard: false
|
||||
});
|
||||
}
|
||||
|
||||
// Set the file name in the modal
|
||||
const fileNameElement = document.getElementById('overwriteFileName');
|
||||
if (fileNameElement) {
|
||||
fileNameElement.textContent = fileName;
|
||||
}
|
||||
|
||||
// Set up the modal buttons
|
||||
const skipBtn = document.getElementById('skipOverwriteBtn');
|
||||
const skipAllBtn = document.getElementById('skipAllOverwriteBtn');
|
||||
const overwriteBtn = document.getElementById('confirmOverwriteBtn');
|
||||
const overwriteAllBtn = document.getElementById('confirmAllOverwriteBtn');
|
||||
|
||||
if (!skipBtn || !skipAllBtn || !overwriteBtn || !overwriteAllBtn) {
|
||||
console.error('[ModalManager] Modal buttons not found');
|
||||
resolve('skip');
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove any existing event listeners
|
||||
const newSkipBtn = skipBtn.cloneNode(true);
|
||||
const newSkipAllBtn = skipAllBtn.cloneNode(true);
|
||||
const newOverwriteBtn = overwriteBtn.cloneNode(true);
|
||||
const newOverwriteAllBtn = overwriteAllBtn.cloneNode(true);
|
||||
|
||||
skipBtn.parentNode.replaceChild(newSkipBtn, skipBtn);
|
||||
skipAllBtn.parentNode.replaceChild(newSkipAllBtn, skipAllBtn);
|
||||
overwriteBtn.parentNode.replaceChild(newOverwriteBtn, overwriteBtn);
|
||||
overwriteAllBtn.parentNode.replaceChild(newOverwriteAllBtn, overwriteAllBtn);
|
||||
|
||||
// Add new event listeners
|
||||
const handleResult = (result) => {
|
||||
console.log('[ModalManager] User chose:', result);
|
||||
this.overwriteModal.hide();
|
||||
resolve(result);
|
||||
};
|
||||
|
||||
skipBtn.onclick = () => handleResult('skip');
|
||||
skipAllBtn.onclick = () => handleResult('skip_all');
|
||||
overwriteBtn.onclick = () => handleResult('overwrite');
|
||||
overwriteAllBtn.onclick = () => handleResult('overwrite_all');
|
||||
newSkipBtn.addEventListener('click', () => handleResult('skip'));
|
||||
newSkipAllBtn.addEventListener('click', () => handleResult('skip_all'));
|
||||
newOverwriteBtn.addEventListener('click', () => handleResult('overwrite'));
|
||||
newOverwriteAllBtn.addEventListener('click', () => handleResult('overwrite_all'));
|
||||
|
||||
this.overwriteModal.show();
|
||||
// Add event listeners for modal events
|
||||
modalEl.addEventListener('shown.bs.modal', () => {
|
||||
console.log('[ModalManager] Modal shown event fired');
|
||||
});
|
||||
|
||||
modalEl.addEventListener('show.bs.modal', () => {
|
||||
console.log('[ModalManager] Modal show event fired');
|
||||
});
|
||||
|
||||
// Hide the modal first if it's already shown
|
||||
if (this.overwriteModal._element.classList.contains('show')) {
|
||||
console.log('[ModalManager] Modal is already shown, hiding first');
|
||||
this.overwriteModal.hide();
|
||||
|
||||
// Add a small delay before showing the modal again
|
||||
setTimeout(() => {
|
||||
console.log('[ModalManager] Attempting to show modal after delay');
|
||||
try {
|
||||
this.overwriteModal.show();
|
||||
console.log('[ModalManager] Overwrite modal shown successfully');
|
||||
} catch (error) {
|
||||
console.error('[ModalManager] Error showing overwrite modal:', error);
|
||||
resolve('skip');
|
||||
}
|
||||
}, 100);
|
||||
} else {
|
||||
// Show the modal if it's not already shown
|
||||
console.log('[ModalManager] Modal is not shown, showing directly');
|
||||
try {
|
||||
this.overwriteModal.show();
|
||||
console.log('[ModalManager] Overwrite modal shown successfully');
|
||||
} catch (error) {
|
||||
console.error('[ModalManager] Error showing overwrite modal:', error);
|
||||
resolve('skip');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -188,17 +188,22 @@ export class UploadManager {
|
||||
try {
|
||||
updateProgress();
|
||||
|
||||
let uploadFormData = formData;
|
||||
if (this.overwriteAll) {
|
||||
uploadFormData = new FormData(this.uploadForm);
|
||||
if (this.roomManager.currentPath) {
|
||||
uploadFormData.append('path', this.roomManager.currentPath);
|
||||
}
|
||||
uploadFormData.set('file', file);
|
||||
uploadFormData.append('overwrite', 'true');
|
||||
// If skipAll is true, skip this file
|
||||
if (this.skipAll) {
|
||||
console.log('[UploadManager] Skipping file due to skipAll:', file.name);
|
||||
currentFileIndex++;
|
||||
updateProgress();
|
||||
await processNextFile();
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await this.uploadFile(uploadFormData);
|
||||
// If overwriteAll is true, add overwrite flag
|
||||
if (this.overwriteAll) {
|
||||
console.log('[UploadManager] Overwriting file due to overwriteAll:', file.name);
|
||||
formData.append('overwrite', 'true');
|
||||
}
|
||||
|
||||
const response = await this.uploadFile(formData);
|
||||
|
||||
if (response.success) {
|
||||
completedFiles++;
|
||||
@@ -211,11 +216,28 @@ export class UploadManager {
|
||||
updateProgress();
|
||||
await processNextFile();
|
||||
} else if (response.error === 'File exists') {
|
||||
const result = await this.handleFileExists(file, uploadFormData);
|
||||
if (result.continue) {
|
||||
// If we have skipAll or overwriteAll set, handle it here
|
||||
if (this.skipAll) {
|
||||
console.log('[UploadManager] Skipping existing file due to skipAll:', file.name);
|
||||
currentFileIndex++;
|
||||
updateProgress();
|
||||
await processNextFile();
|
||||
} else if (this.overwriteAll) {
|
||||
console.log('[UploadManager] Overwriting existing file due to overwriteAll:', file.name);
|
||||
formData.append('overwrite', 'true');
|
||||
await this.uploadFile(formData);
|
||||
completedFiles++;
|
||||
currentFileIndex++;
|
||||
updateProgress();
|
||||
await processNextFile();
|
||||
} else {
|
||||
const result = await this.handleFileExists(file, formData);
|
||||
if (result.continue) {
|
||||
completedFiles++;
|
||||
currentFileIndex++;
|
||||
updateProgress();
|
||||
await processNextFile();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -245,6 +267,15 @@ export class UploadManager {
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
// Handle 409 Conflict response
|
||||
if (response.status === 409) {
|
||||
return {
|
||||
success: false,
|
||||
error: 'File exists'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: response.ok,
|
||||
error: result.error
|
||||
@@ -294,7 +325,7 @@ export class UploadManager {
|
||||
if (this.overwriteAll) {
|
||||
formData.append('overwrite', 'true');
|
||||
const response = await this.uploadFile(formData);
|
||||
return { continue: response.success };
|
||||
return { continue: true };
|
||||
}
|
||||
|
||||
if (this.skipAll) {
|
||||
@@ -303,20 +334,30 @@ export class UploadManager {
|
||||
|
||||
const result = await this.roomManager.modalManager.showOverwriteModal(file.name);
|
||||
|
||||
// Add a delay before processing the result
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
|
||||
if (result === 'overwrite' || result === 'overwrite_all') {
|
||||
if (result === 'overwrite_all') {
|
||||
this.overwriteAll = true;
|
||||
this.skipAll = false;
|
||||
formData.append('overwrite', 'true');
|
||||
await this.uploadFile(formData);
|
||||
return { continue: true };
|
||||
} else {
|
||||
formData.append('overwrite', 'true');
|
||||
await this.uploadFile(formData);
|
||||
return { continue: true };
|
||||
}
|
||||
formData.append('overwrite', 'true');
|
||||
const response = await this.uploadFile(formData);
|
||||
return { continue: response.success };
|
||||
} else if (result === 'skip' || result === 'skip_all') {
|
||||
if (result === 'skip_all') {
|
||||
this.skipAll = true;
|
||||
this.overwriteAll = false;
|
||||
}
|
||||
return { continue: true };
|
||||
}
|
||||
|
||||
return { continue: false };
|
||||
// If user closes the modal without making a choice, skip the file
|
||||
return { continue: true };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user