diff --git a/src/components/FileExistsDialog.vue b/src/components/FileExistsDialog.vue index 1cb629f..a27ae92 100644 --- a/src/components/FileExistsDialog.vue +++ b/src/components/FileExistsDialog.vue @@ -29,15 +29,17 @@
+

Vous allez ecraser le fichier/dossier

-

Appliquer à tous

+

Appliquer à tous*

+

* ecrasera tous les fichiers qui ont le même nom sur votre dépôt

-
+ diff --git a/src/components/FileTable.vue b/src/components/FileTable.vue index 4da6eed..b17ff3d 100644 --- a/src/components/FileTable.vue +++ b/src/components/FileTable.vue @@ -120,7 +120,7 @@ - + @@ -182,6 +182,9 @@ export default { isDirectory: false, // Si l'element a edite est un dossier ou non transferProgress: 0, transferStatus: 'bg-blue-500', + overwrite: false, + applyToAll: false, + cancelOperation: false, }; }, async mounted() { @@ -307,12 +310,15 @@ export default { this.isTransfering = false; this.transferProgress = 0; + this.cancelOperation = false; } catch (error) { console.error('Erreur lors du drop :', error); this.transferStatus = 'bg-red-500'; this.isTransfering = false; } + this.overwrite = false; + this.applyToAll = false; }, async moveFilesOfFolder(folder, parentPath) { await this.createFolder(folder, parentPath + '/'); @@ -329,14 +335,16 @@ export default { const progressSteps = Math.floor(100 / checkChildrenInChildren(folder)); for (const child of folder.children) { - this.transferProgress += progressSteps; - if (child.isDirectory) { - await this.moveFilesOfFolder(child, parentPath + '/' + child.parentPath + '/'); - } else { - if (child.content && typeof child.content.arrayBuffer === 'function') { - child.content = await child.content.arrayBuffer(); + if(!this.cancelOperation){ + this.transferProgress += progressSteps; + if (child.isDirectory) { + await this.moveFilesOfFolder(child, parentPath + '/' + child.parentPath + '/'); + } else { + if (child.content && typeof child.content.arrayBuffer === 'function') { + child.content = await child.content.arrayBuffer(); + } + await this.moveFileToTarget(child, parentPath + '/' + child.parentPath + '/'); } - await this.moveFileToTarget(child, parentPath + '/' + child.parentPath + '/'); } } }, @@ -353,10 +361,14 @@ export default { } const alreadyExists = await this.elemtAlreadyExists(fullPath); - if(!alreadyExists) { + if(!alreadyExists || this.overwrite) { // Évitez les chemins incorrects en utilisant `path.normalize` si disponible await client.putFileContents(fullPath, file.content); + if (this.overwrite && !this.applyToAll) { + this.overwrite = false; + } + // Recharge les fichiers après l'opération await this.fetchFiles(); } @@ -366,6 +378,9 @@ export default { while(!this.fileExistDialogDisabled) { await this.sleep(50); } + if(!this.cancelOperation){ + await this.moveFileToTarget(file,parentPath); + } } } catch (error) { console.error('Erreur lors du déplacement du fichier:', error); @@ -382,12 +397,15 @@ export default { await client.createDirectory(fullPath); await this.fetchFiles(); } - else{ + else if(!this.applyToAll){ this.initialFileName = folder.name; this.fileExistDialogDisabled = false; while(!this.fileExistDialogDisabled) { await this.sleep(); } + if(this.overwrite && !this.applyToAll) { + this.overwrite = false; + } } } catch (error) { console.error('Erreur lors de la création du dossier :', error); @@ -452,6 +470,11 @@ export default { await this.fetchFiles(); } }, + setOverwrite(options) { + this.overwrite = true; + this.applyToAll = options.forAll; + this.fileExistDialogDisabled = true; + }, /** * Check si un fichier ou un dossier existe deja sur le serveur * @param path le chemin du fichier/dossier @@ -462,6 +485,10 @@ export default { return exists; }, + cancelDrop(){ + this.cancelOperation = true; + this.closeFileExistsDialog(); + }, async sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } diff --git a/src/output.css b/src/output.css index 9457292..b03eead 100644 --- a/src/output.css +++ b/src/output.css @@ -579,10 +579,6 @@ video { } } -.visible { - visibility: visible; -} - .fixed { position: fixed; } @@ -741,10 +737,6 @@ video { flex-direction: column; } -.content-center { - align-content: center; -} - .content-evenly { align-content: space-evenly; } @@ -909,6 +901,11 @@ video { line-height: 1.75rem; } +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + .font-medium { font-weight: 500; } @@ -942,6 +939,11 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } +.text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} + .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);