From 1116551fb6720d2d7c58a856c15fc27cfcd18a25 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christina=20T=C3=B6gl?= <toegl@tugraz.at>
Date: Wed, 12 Aug 2020 15:59:11 +0200
Subject: [PATCH] Fix problems with numbering and for all option.

---
 .../src/dbp-nextcloud-file-picker.js          | 69 +++++++++++++------
 1 file changed, 47 insertions(+), 22 deletions(-)

diff --git a/packages/file-handling/src/dbp-nextcloud-file-picker.js b/packages/file-handling/src/dbp-nextcloud-file-picker.js
index 60e171bd..e3c951e1 100644
--- a/packages/file-handling/src/dbp-nextcloud-file-picker.js
+++ b/packages/file-handling/src/dbp-nextcloud-file-picker.js
@@ -36,11 +36,13 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
         this._onReceiveWindowMessage = this.onReceiveWindowMessage.bind(this);
 
         this.folderIsSelected = i18n.t('nextcloud-file-picker.load-in-folder');
+        this.generatedFilename = '';
         this.replaceFilename = '';
+        this.customFilename = '';
         this.uploadFileObject = null;
         this.uploadFileDirectory = null;
         this.fileList = [];
-        this.fileNameCounter = 0;
+        this.fileNameCounter = 1;
         this.forAll = false;
     }
 
@@ -383,7 +385,6 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
 
     uploadFiles(files, directory) {
         this.fileList = files;
-        this.fileNameCounter = 1;
         this.forAll = false;
         this.uploadFile(directory);
     }
@@ -391,9 +392,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
     async uploadFile(directory) {
         if(this.fileList.length !== 0) {
             let file = this.fileList[0];
-            console.log("FileList: ", this.fileList);
             this.replaceFilename = file.name;
-            console.log("before one file finished");
             let path = directory + "/" + file.name;
             // https://github.com/perry-mitchell/webdav-client#putfilecontents
             let that = this;
@@ -403,16 +402,24 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                         }}).then(function() {
                             that.loading = false;
                             that.statusText = "";
-                            console.log("try finished");
                             that.fileList.shift();
                             that.uploadFile(directory);
                         }).catch(error => {
                             console.error(error.message);
                             //this.loading = false;
                             //this.statusText = error.message;
-                            console.log("--- h-", error.message);
+                            //console.log("--- h-", error.message);
                             if(error.message.search("412") !== -1) {
-                                this.forAll ? this.uploadFileAfterConflict() : this.replaceModalDialog(file, directory);
+                                this.generatedFilename = this.getNextFilename();
+                                this._("#replace-filename").value = this.generatedFilename;
+                                if(this.forAll) {
+                                    this.uploadFileObject = file;
+                                    this.uploadFileDirectory = directory;
+                                    this.uploadFileAfterConflict();
+                                }
+                                else {
+                                    this.replaceModalDialog(file, directory);
+                                }
                             }
                         });
         }
@@ -421,6 +428,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             this.statusText = "";
             this._("#replace_mode_all").checked = false;
             this.forAll = false;
+            this.customFilename = '';
             const event = new CustomEvent("dbp-nextcloud-file-picker-file-uploaded-finished",
                 {  bubbles: true, composed: true });
             this.dispatchEvent(event);
@@ -439,12 +447,15 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             this.uploadFile(directory);
             return true;
         } else if (this._("input[name='replacement']:checked").value === "new-name") {
+            if(this.generatedFilename !== this._("#replace-filename").value) {
+                this.customFilename = this._("#replace-filename").value;
+            }
             path = directory + "/" + this._("#replace-filename").value;
-            this.replaceFilename = this.forAll ? this.getNextFilename() : this._("#replace-filename").value;
+            this.replaceFilename = this._("#replace-filename").value;
         } else {
             path = directory + "/" + this.uploadFileObject.name;
             overwrite = true;
-            console.log("uploadFileAfterConflict called");
+            //console.log("uploadFileAfterConflict called for file ", this.uploadFileObject.name);
         }
 
         let that = this;
@@ -455,19 +466,27 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
                 }
             }).then(content => {
-                console.log("write file with name: ", file.name);
                 that.loading = false;
                 that.statusText = "";
                 MicroModal.close(this._("#replace-modal"));
                 that.fileList.shift();
                 that.uploadFile(directory);
             }).catch(error => {
-                console.error(error.message);
+                //console.error(error.message);
                 //that.loading = false;
                 //that.statusText = error.message;
                 if (error.message.search("412") !== -1) {
                     MicroModal.close(that._("#replace-modal"));
-                    this.forAll ? that.uploadFileAfterConflict() : that.replaceModalDialog(file, directory);
+                    this.generatedFilename = this.getNextFilename();
+                    this._("#replace-filename").value = this.generatedFilename;
+                    if(this.forAll) {
+                        this.uploadFileObject = file;
+                        this.uploadFileDirectory = directory;
+                        this.uploadFileAfterConflict();
+                    }
+                    else {
+                        this.replaceModalDialog(file, directory);
+                    }
                 }
             });
 
@@ -488,9 +507,15 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
      *
      * @returns {string} The next filename
      */
-    getNextFilename() { //TODO handle custom filenames
+    getNextFilename() {
         let nextFilename = "";
-        let splitFilename = this.replaceFilename.split(".");
+        let splitFilename;
+        if(this.forAll && this.customFilename !== '') {
+            splitFilename = this.customFilename.split(".");
+        }
+        else {
+            splitFilename = this.replaceFilename.split(".");
+        }
 
         let splitBracket = splitFilename[0].split('(');
         if(splitBracket.length > 1) {
@@ -538,7 +563,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
     /**
      *
      */
-    cancelOverwrite() { //TODO simplify?
+    cancelOverwrite() {
       this.fileList = [];
     }
 
@@ -829,9 +854,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                 flex-direction: column;
                 justify-content: center;
                 padding: 30px;
-                max-height: 460px;
-                min-height: 460px;
-                min-width: 400px;
+                max-height: 450px;
+                min-height: 450px;
+                min-width: 380px;
                 max-width: 190px;
             }
             
@@ -850,7 +875,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                 display: flex;
                 flex-direction: column;
                 height: 100%;
-                justify-content: space-around;
+                justify-content: space-evenly;
             }
             
             #replace-modal-box .radio-btn {
@@ -865,7 +890,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             #replace-modal-box #replace-filename {
                 display: block;
                 width: 100%;
-                margin-top: 5px;
+                margin-top: 8px;
             }
             
             #replace-modal-box input[type="text"]:disabled {
@@ -883,7 +908,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             #replace-modal-box .modal-footer .modal-footer-btn {
                 display: flex;
                 justify-content: space-between;
-                padding-bottom: 10px;
+                padding-bottom: 15px;
             }
             
             @media only screen
@@ -1055,7 +1080,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                             <div>
                                 <input type="radio" id="replace-new-name" class="radio-btn" name="replacement" value="new-name" checked @click="${() => {this.setInputFieldVisibility();}}">
                                 <label for="new-name">${i18n.t('nextcloud-file-picker.replace-new_name')}:
-                                     <input type="text" id="replace-filename" name="replace-filename" value="${this.getNextFilename()}" onClick="this.select();">
+                                     <input type="text" id="replace-filename" name="replace-filename" value="" onClick="this.select();">
                                 </label>
                             </div>
                             <div>
-- 
GitLab