diff --git a/plugins/nextcloud/index.php b/plugins/nextcloud/index.php
index 543d0bfd7..39fae6da3 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.1',
- RELEASE = '2022-10-10',
+ VERSION = '2.2',
+ RELEASE = '2022-10-13',
CATEGORY = 'Integrations',
DESCRIPTION = 'Integrate with Nextcloud v20+',
REQUIRED = '2.18.6';
@@ -18,8 +18,9 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
$this->addHook('main.fabrica', 'MainFabrica');
$this->addHook('filter.app-data', 'FilterAppData');
+ $this->addJs('js/message.js');
$this->addHook('json.attachments', 'DoAttachmentsActions');
- $this->addJs('js/attachments.js');
+ $this->addJsonHook('NextcloudSaveMsg', 'NextcloudSaveMsg');
}
}
@@ -55,6 +56,39 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
}
*/
+ public function NextcloudSaveMsg() : array
+ {
+ $aValues = \RainLoop\Utils::DecodeKeyValuesQ($this->jsonParam('msgHash', ''));
+ if (!empty($aValues['Folder']) && !empty($aValues['Uid'])) {
+ $oActions = \RainLoop\Api::Actions();
+ $oMailClient = $oActions->MailClient();
+ if (!$oMailClient->IsLoggined()) {
+ $oAccount = $oActions->getAccountFromToken();
+ $oAccount->ImapConnectAndLoginHelper($oActions->Plugins(), $oMailClient, $oActions->Config());
+ }
+
+ $sSaveFolder = $this->Config()->Get('plugin', 'save_folder', '') ?: 'Emails';
+ $oFiles = \OCP\Files::getStorage('files');
+ if ($oFiles && \method_exists($oFiles, 'file_put_contents')) {
+ $oFiles->is_dir($sSaveFolder) || $oFiles->mkdir($sSaveFolder);
+ }
+ $sFilename = $sSaveFolder . '/' . ($this->jsonParam('filename', '') ?: \date('YmdHis')) . '.eml';
+
+ $oMailClient->MessageMimeStream(
+ function ($rResource) use ($oFiles, $sFilename) {
+ if (\is_resource($rResource)) {
+ $oFiles->file_put_contents($sFilename, $rResource);
+ }
+ },
+ (string) $aValues['Folder'],
+ (int) $aValues['Uid'],
+ isset($aValues['MimeIndex']) ? (string) $aValues['MimeIndex'] : ''
+ );
+ }
+
+ return $this->jsonResponse(__FUNCTION__, true);
+ }
+
public function DoAttachmentsActions(\SnappyMail\AttachmentsAction $data)
{
if (static::isLoggedIn() && 'nextcloud' === $data->action) {
diff --git a/plugins/nextcloud/js/attachments.js b/plugins/nextcloud/js/message.js
similarity index 67%
rename from plugins/nextcloud/js/attachments.js
rename to plugins/nextcloud/js/message.js
index 1b438324e..74fcd2821 100644
--- a/plugins/nextcloud/js/attachments.js
+++ b/plugins/nextcloud/js/message.js
@@ -30,45 +30,42 @@
});
}
};
+
+ view.nextcloudSaveMsg = () => {
+ let msg = view.message();
+ rl.pluginRemoteRequest(
+ (iError, data) => {
+ console.dir({
+ iError:iError,
+ data:data
+ });
+ },
+ 'NextcloudSaveMsg',
+ {
+ 'msgHash': msg.requestHash,
+ 'filename': msg.subject()
+ }
+ );
+ };
}
});
let template = document.getElementById('MailMessageView');
+
const attachmentsControls = template.content.querySelector('.attachmentsControls');
if (attachmentsControls) {
attachmentsControls.append(Element.fromHTML(''
+ '✖'
+ '💾'
- + 'Save Nextcloud'
+ + ''
+ ''));
}
-
- /** TODO: File browser to attach files in composer */
-/*
- let cfg = rl.settings.get('Nextcloud');
- fetch(cfg.WebDAV . '/files/' . cfg.UID, {
- method: 'PROPFIND',
- mode: 'same-origin',
- cache: 'no-cache',
- redirect: 'error',
- credentials: 'same-origin',
- headers: {
- 'Content-Type': 'application/xml; charset=utf-8',
- },
- body: ''
- + '