fix upload multi
This commit is contained in:
Binary file not shown.
@@ -27,10 +27,18 @@ export class ModalManager {
|
|||||||
this.newFolderModal = new bootstrap.Modal(document.getElementById('newFolderModal'));
|
this.newFolderModal = new bootstrap.Modal(document.getElementById('newFolderModal'));
|
||||||
this.renameModal = new bootstrap.Modal(document.getElementById('renameModal'));
|
this.renameModal = new bootstrap.Modal(document.getElementById('renameModal'));
|
||||||
this.detailsModal = new bootstrap.Modal(document.getElementById('detailsModal'));
|
this.detailsModal = new bootstrap.Modal(document.getElementById('detailsModal'));
|
||||||
this.overwriteModal = new bootstrap.Modal(document.getElementById('overwriteConfirmModal'), {
|
|
||||||
|
// 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',
|
backdrop: 'static',
|
||||||
keyboard: false
|
keyboard: false
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.moveModal = new bootstrap.Modal(document.getElementById('moveModal'));
|
this.moveModal = new bootstrap.Modal(document.getElementById('moveModal'));
|
||||||
|
|
||||||
this.initializeModals();
|
this.initializeModals();
|
||||||
@@ -225,30 +233,109 @@ export class ModalManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the overwrite confirmation modal.
|
* 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')
|
* @returns {Promise<string>} A promise that resolves with the user's choice ('skip', 'skip_all', 'overwrite', or 'overwrite_all')
|
||||||
*/
|
*/
|
||||||
showOverwriteModal(filename) {
|
showOverwriteModal(fileName) {
|
||||||
return new Promise((resolve) => {
|
console.log('[ModalManager] Showing overwrite modal for:', fileName);
|
||||||
const fileNameEl = document.getElementById('overwriteFileName');
|
|
||||||
if (fileNameEl) fileNameEl.textContent = filename;
|
|
||||||
|
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
// 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 skipBtn = document.getElementById('skipOverwriteBtn');
|
||||||
const skipAllBtn = document.getElementById('skipAllOverwriteBtn');
|
const skipAllBtn = document.getElementById('skipAllOverwriteBtn');
|
||||||
const overwriteBtn = document.getElementById('confirmOverwriteBtn');
|
const overwriteBtn = document.getElementById('confirmOverwriteBtn');
|
||||||
const overwriteAllBtn = document.getElementById('confirmAllOverwriteBtn');
|
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) => {
|
const handleResult = (result) => {
|
||||||
|
console.log('[ModalManager] User chose:', result);
|
||||||
this.overwriteModal.hide();
|
this.overwriteModal.hide();
|
||||||
resolve(result);
|
resolve(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
skipBtn.onclick = () => handleResult('skip');
|
newSkipBtn.addEventListener('click', () => handleResult('skip'));
|
||||||
skipAllBtn.onclick = () => handleResult('skip_all');
|
newSkipAllBtn.addEventListener('click', () => handleResult('skip_all'));
|
||||||
overwriteBtn.onclick = () => handleResult('overwrite');
|
newOverwriteBtn.addEventListener('click', () => handleResult('overwrite'));
|
||||||
overwriteAllBtn.onclick = () => handleResult('overwrite_all');
|
newOverwriteAllBtn.addEventListener('click', () => handleResult('overwrite_all'));
|
||||||
|
|
||||||
|
// 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();
|
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 {
|
try {
|
||||||
updateProgress();
|
updateProgress();
|
||||||
|
|
||||||
let uploadFormData = formData;
|
// If skipAll is true, skip this file
|
||||||
if (this.overwriteAll) {
|
if (this.skipAll) {
|
||||||
uploadFormData = new FormData(this.uploadForm);
|
console.log('[UploadManager] Skipping file due to skipAll:', file.name);
|
||||||
if (this.roomManager.currentPath) {
|
currentFileIndex++;
|
||||||
uploadFormData.append('path', this.roomManager.currentPath);
|
updateProgress();
|
||||||
}
|
await processNextFile();
|
||||||
uploadFormData.set('file', file);
|
return;
|
||||||
uploadFormData.append('overwrite', 'true');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (response.success) {
|
||||||
completedFiles++;
|
completedFiles++;
|
||||||
@@ -211,11 +216,28 @@ export class UploadManager {
|
|||||||
updateProgress();
|
updateProgress();
|
||||||
await processNextFile();
|
await processNextFile();
|
||||||
} else if (response.error === 'File exists') {
|
} else if (response.error === 'File exists') {
|
||||||
const result = await this.handleFileExists(file, uploadFormData);
|
// If we have skipAll or overwriteAll set, handle it here
|
||||||
if (result.continue) {
|
if (this.skipAll) {
|
||||||
|
console.log('[UploadManager] Skipping existing file due to skipAll:', file.name);
|
||||||
currentFileIndex++;
|
currentFileIndex++;
|
||||||
updateProgress();
|
updateProgress();
|
||||||
await processNextFile();
|
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) {
|
} catch (error) {
|
||||||
@@ -245,6 +267,15 @@ export class UploadManager {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
|
// Handle 409 Conflict response
|
||||||
|
if (response.status === 409) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: 'File exists'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: response.ok,
|
success: response.ok,
|
||||||
error: result.error
|
error: result.error
|
||||||
@@ -294,7 +325,7 @@ export class UploadManager {
|
|||||||
if (this.overwriteAll) {
|
if (this.overwriteAll) {
|
||||||
formData.append('overwrite', 'true');
|
formData.append('overwrite', 'true');
|
||||||
const response = await this.uploadFile(formData);
|
const response = await this.uploadFile(formData);
|
||||||
return { continue: response.success };
|
return { continue: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.skipAll) {
|
if (this.skipAll) {
|
||||||
@@ -303,20 +334,30 @@ export class UploadManager {
|
|||||||
|
|
||||||
const result = await this.roomManager.modalManager.showOverwriteModal(file.name);
|
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' || result === 'overwrite_all') {
|
||||||
if (result === 'overwrite_all') {
|
if (result === 'overwrite_all') {
|
||||||
this.overwriteAll = true;
|
this.overwriteAll = true;
|
||||||
}
|
this.skipAll = false;
|
||||||
formData.append('overwrite', 'true');
|
formData.append('overwrite', 'true');
|
||||||
const response = await this.uploadFile(formData);
|
await this.uploadFile(formData);
|
||||||
return { continue: response.success };
|
return { continue: true };
|
||||||
|
} else {
|
||||||
|
formData.append('overwrite', 'true');
|
||||||
|
await this.uploadFile(formData);
|
||||||
|
return { continue: true };
|
||||||
|
}
|
||||||
} else if (result === 'skip' || result === 'skip_all') {
|
} else if (result === 'skip' || result === 'skip_all') {
|
||||||
if (result === 'skip_all') {
|
if (result === 'skip_all') {
|
||||||
this.skipAll = true;
|
this.skipAll = true;
|
||||||
|
this.overwriteAll = false;
|
||||||
}
|
}
|
||||||
return { continue: true };
|
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