From 3c11ec27e8183d500270662efecac07cdc7438b9 Mon Sep 17 00:00:00 2001
From: Tamara Steinwender <tamara.steinwender@tugraz.at>
Date: Wed, 22 Jul 2020 16:53:28 +0200
Subject: [PATCH] Added upload in current directory function

---
 .../src/dbp-nextcloud-file-picker.js          | 32 ++++++++++++++++---
 packages/file-handling/src/file-sink.js       |  1 +
 .../src/i18n/de/translation.json              |  4 ++-
 .../src/i18n/en/translation.json              |  4 ++-
 4 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/packages/file-handling/src/dbp-nextcloud-file-picker.js b/packages/file-handling/src/dbp-nextcloud-file-picker.js
index 146f7488..5018f1ac 100644
--- a/packages/file-handling/src/dbp-nextcloud-file-picker.js
+++ b/packages/file-handling/src/dbp-nextcloud-file-picker.js
@@ -35,6 +35,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
         this.loading = false;
         this._onReceiveWindowMessage = this.onReceiveWindowMessage.bind(this);
 
+        this.folderIsSelected = i18n.t('nextcloud-file-picker.load-in-folder');
     }
 
     static get scopedElements() {
@@ -55,11 +56,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             nextcloudName: { type: String, attribute: 'nextcloud-name' },
             isPickerActive: { type: Boolean, attribute: false },
             statusText: { type: String, attribute: false },
+            folderIsSelected: { type: String, attribute: false },
             directoryPath: { type: String, attribute: false },
             allowedMimeTypes: { type: String, attribute: 'allowed-mime-types' },
             directoriesOnly: { type: Boolean, attribute: 'directories-only' },
             maxSelectedItems: { type: Number, attribute: 'max-selected-items' },
-
         };
     }
 
@@ -140,6 +141,14 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     {column:"type", dir:"asc"},
 
                 ],
+                rowSelectionChanged: (data, rows) => {
+                    if( data.length > 0  && this.directoriesOnly) {
+                        this.folderIsSelected = i18n.t('nextcloud-file-picker.load-to-folder');
+                    }
+                    else {
+                        this.folderIsSelected = i18n.t('nextcloud-file-picker.load-in-folder');
+                    }
+                },
                 rowClick: (e, row) => {
                     const data = row.getData();
 
@@ -160,6 +169,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     if (this.directoriesOnly) {
                         const data = row.getData();
                         this.directoryClicked(e, data);
+                        this.folderIsSelected = i18n.t('nextcloud-file-picker.load-in-folder');
                     }
                 }
             });
@@ -325,11 +335,21 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
     }
 
     sendDirectory(directory) {
+
+        let path;
+
+        if(!directory[0])
+        {
+            path = this.directoryPath;
+        }
+        else {
+            path = directory[0].filename;
+        }
         this.loading = true;
-        this.statusText = "Uploading to " + directory[0].filename + "...";
+        this.statusText = "Uploading to " + path + " ...";
 
         const event = new CustomEvent("dbp-nextcloud-file-picker-file-uploaded",
-            { "detail": directory[0].filename, bubbles: true, composed: true });
+            { "detail": path, bubbles: true, composed: true });
         this.dispatchEvent(event);
     }
 
@@ -361,7 +381,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
         let ret = false;
         try{
             let contents = await this.webDavClient
-            .putFileContents(path, file,  { onUploadProgress: progress => {
+            .putFileContents(path, file,  { overwrite: false, onUploadProgress: progress => {
                     console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
                 }});
             this.loading = false;
@@ -782,9 +802,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                 <div class="nextcloud-footer ${classMap({hidden: !this.isPickerActive})}">
                     <div class="nextcloud-footer-grid">
                         <button class="button select-button is-primary ${classMap({hidden: !this.directoriesOnly})}"
-                                @click="${() => { this.sendDirectory(this.tabulatorTable.getSelectedData()); }}">${i18n.t('nextcloud-file-picker.select-folder')}</button>
+                                @click="${() => { this.sendDirectory(this.tabulatorTable.getSelectedData()); }}">${this.folderIsSelected}</button>
                         <button class="button select-button is-primary ${classMap({hidden: this.directoriesOnly})}"
                                 @click="${() => { this.downloadFiles(this.tabulatorTable.getSelectedData()); }}">${i18n.t('nextcloud-file-picker.select-files')}</button>
+                               
+                                
                         <div class="block info-box ${classMap({hidden: this.statusText === ""})}">
                             <dbp-mini-spinner style="font-size: 0.7em" class="${classMap({hidden: this.loading === false})}"></dbp-mini-spinner>
                             ${this.statusText}
diff --git a/packages/file-handling/src/file-sink.js b/packages/file-handling/src/file-sink.js
index e7c4a214..5f1b4244 100644
--- a/packages/file-handling/src/file-sink.js
+++ b/packages/file-handling/src/file-sink.js
@@ -46,6 +46,7 @@ export class FileSink extends ScopedElementsMixin(DBPLitElement) {
      */
     static get properties() {
         return {
+            context: { type: String, attribute: 'context'},
             lang: { type: String },
             filename: { type: String },
             files: { type: Array, attribute: false },
diff --git a/packages/file-handling/src/i18n/de/translation.json b/packages/file-handling/src/i18n/de/translation.json
index 936fd36f..296d3bbe 100644
--- a/packages/file-handling/src/i18n/de/translation.json
+++ b/packages/file-handling/src/i18n/de/translation.json
@@ -47,6 +47,8 @@
     "select-folder": "In diesem Ordner hochladen",
     "webdav-error": "Etwas ist schief gelaufen",
     "add-folder": "Neuen Ordner erstellen",
-    "new-folder-placeholder": "Neuer Ordner"
+    "new-folder-placeholder": "Neuer Ordner",
+    "load-in-folder": "Ins aktuelle Verzeichnis laden",
+    "load-to-folder": "Im ausgewählten Ordner hochladen"
   }
 }
diff --git a/packages/file-handling/src/i18n/en/translation.json b/packages/file-handling/src/i18n/en/translation.json
index 07746e84..d8873c29 100644
--- a/packages/file-handling/src/i18n/en/translation.json
+++ b/packages/file-handling/src/i18n/en/translation.json
@@ -47,6 +47,8 @@
     "select-folder": "Upload in selected folder",
     "webdav-error": "Something went wrong",
     "add-folder": "Add new folder",
-    "new-folder-placeholder": "New folder"
+    "new-folder-placeholder": "New folder",
+    "load-in-folder": "Load into the current directory",
+    "load-to-folder": "Upload to the selected folder"
   }
 }
-- 
GitLab