From a41afb17ad17cf73851dfd855e7fabd201fce4fe Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Tue, 18 Oct 2022 19:21:27 +0200 Subject: [PATCH] Resolve Nextcloud save issue and added mockup code for files browser https://github.com/the-djmaze/snappymail/issues/96#issuecomment-1282589485 --- plugins/nextcloud/index.php | 6 ++- plugins/nextcloud/js/message.js | 2 +- plugins/nextcloud/js/webdav.js | 44 +++++++++++++++++++ .../templates/PopupsNextcloudFiles.html | 12 +++++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 plugins/nextcloud/templates/PopupsNextcloudFiles.html diff --git a/plugins/nextcloud/index.php b/plugins/nextcloud/index.php index 41426269e..80a0a077c 100644 --- a/plugins/nextcloud/index.php +++ b/plugins/nextcloud/index.php @@ -4,8 +4,8 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin { const NAME = 'Nextcloud', - VERSION = '2.3', - RELEASE = '2022-10-18', + VERSION = '2.4', + RELEASE = '2022-10-19', CATEGORY = 'Integrations', DESCRIPTION = 'Integrate with Nextcloud v20+', REQUIRED = '2.19.0'; @@ -21,6 +21,8 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin $this->addJs('js/message.js'); $this->addHook('json.attachments', 'DoAttachmentsActions'); $this->addJsonHook('NextcloudSaveMsg', 'NextcloudSaveMsg'); + + $this->addTemplate('templates/PopupsNextcloudFiles.html'); } } diff --git a/plugins/nextcloud/js/message.js b/plugins/nextcloud/js/message.js index 681b85fdb..e3fa2f2a7 100644 --- a/plugins/nextcloud/js/message.js +++ b/plugins/nextcloud/js/message.js @@ -46,7 +46,7 @@ * TODO: op select screen to show browseFiles result * Then the user can select which Nextcloud folder to save to */ - browseFiles(); +// browseFiles(); rl.pluginRemoteRequest( (iError, data) => { diff --git a/plugins/nextcloud/js/webdav.js b/plugins/nextcloud/js/webdav.js index 95caea3c5..2ae2d0426 100644 --- a/plugins/nextcloud/js/webdav.js +++ b/plugins/nextcloud/js/webdav.js @@ -87,9 +87,53 @@ }); } + class NextcloudFilesPopupView extends rl.pluginPopupView { + constructor() { + super('NextcloudFiles'); + this.addObservables({ + folder: '', + files: false + }); + } + + onShow(files, fResolve) { + this.files(!!files); + this.fResolve = fResolve; + } + + select() { + this.close(); + this.fResolve(this.folder()); + } + + onClose() { + this.close(); + this.fResolve(); + return false; + } + } + rl.ncFiles = new class { async getDirectoryContents(path) { return await fetchFiles(propertyRequestBody, path); } + + selectFolder() { + return new Promise(resolve => { + NextcloudFilesPopupView.showModal([ + false, + folder => resolve(folder), + ]); + }); + } + + selectFiles() { + return new Promise(resolve => { + NextcloudFilesPopupView.showModal([ + true, + files => resolve(files), + ]); + }); + } } })(window.rl); diff --git a/plugins/nextcloud/templates/PopupsNextcloudFiles.html b/plugins/nextcloud/templates/PopupsNextcloudFiles.html new file mode 100644 index 000000000..e0ac608be --- /dev/null +++ b/plugins/nextcloud/templates/PopupsNextcloudFiles.html @@ -0,0 +1,12 @@ +
+ × +

+
+ +