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);