From 79387262e3d2f48100720329f1f5bebf1a96831a Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Fri, 21 Oct 2022 16:10:07 +0200 Subject: [PATCH] Cleanup Nextcloud code --- .../snappymail/lib/AppInfo/Application.php | 2 +- .../nextcloud/snappymail/templates/empty.php | 1 - .../snappymail/templates/index-empty.php | 3 - .../snappymail/templates/personal.php | 8 - plugins/nextcloud/index.php | 12 - plugins/nextcloud/js/webdav.js | 212 ++++++++---------- 6 files changed, 92 insertions(+), 146 deletions(-) delete mode 100755 integrations/nextcloud/snappymail/templates/empty.php delete mode 100755 integrations/nextcloud/snappymail/templates/index-empty.php delete mode 100755 integrations/nextcloud/snappymail/templates/personal.php diff --git a/integrations/nextcloud/snappymail/lib/AppInfo/Application.php b/integrations/nextcloud/snappymail/lib/AppInfo/Application.php index ba7674101..9203a62da 100644 --- a/integrations/nextcloud/snappymail/lib/AppInfo/Application.php +++ b/integrations/nextcloud/snappymail/lib/AppInfo/Application.php @@ -96,7 +96,7 @@ class Application extends App implements IBootstrap }); $userSession->listen('\OC\User', 'logout', function($user) { - $oSession = \OC::$server->getSession()['snappymail-password'] = ''; + \OC::$server->getSession()['snappymail-password'] = ''; SnappyMailHelper::loadApp(); \RainLoop\Api::LogoutCurrentLogginedUser(); }); diff --git a/integrations/nextcloud/snappymail/templates/empty.php b/integrations/nextcloud/snappymail/templates/empty.php deleted file mode 100755 index fa0c45f25..000000000 --- a/integrations/nextcloud/snappymail/templates/empty.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/integrations/nextcloud/snappymail/templates/index-empty.php b/integrations/nextcloud/snappymail/templates/index-empty.php deleted file mode 100755 index e95b0cd88..000000000 --- a/integrations/nextcloud/snappymail/templates/index-empty.php +++ /dev/null @@ -1,3 +0,0 @@ -
- t('SnappyMail Webmail is not configured yet.')); ?> -
diff --git a/integrations/nextcloud/snappymail/templates/personal.php b/integrations/nextcloud/snappymail/templates/personal.php deleted file mode 100755 index ccaf65de2..000000000 --- a/integrations/nextcloud/snappymail/templates/personal.php +++ /dev/null @@ -1,8 +0,0 @@ -getContainer()->query(PersonalSettings::class); -return $controller->getForm()->render(); - diff --git a/plugins/nextcloud/index.php b/plugins/nextcloud/index.php index 157163a77..d46028558 100644 --- a/plugins/nextcloud/index.php +++ b/plugins/nextcloud/index.php @@ -49,18 +49,6 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin /* \OC::$server->getCalendarManager(); \OC::$server->getLDAPProvider(); - - $oFiles = \OCP\Files::getStorage('files'); - if ($oFiles and $oFiles->is_dir('/')) { - $dh = $oFiles->opendir('/'); - if (\is_resource($dh)) { - while (($file = \readdir($dh)) !== false) { - if ($file != '.' && $file != '..') { - // DO THINGS - } - } - } - } */ public function NextcloudAttachFile() : array diff --git a/plugins/nextcloud/js/webdav.js b/plugins/nextcloud/js/webdav.js index eba7b7410..722a7ce55 100644 --- a/plugins/nextcloud/js/webdav.js +++ b/plugins/nextcloud/js/webdav.js @@ -1,36 +1,25 @@ (rl => { - const - namespace = 'DAV:', +const + namespace = 'DAV:', - propertyRequestBody = ` - - - - - - - - - - - - - - - - - `, + propfindBody = ` + + + + + + +`, - xmlParser = new DOMParser(), - pathRegex = /.*\/remote.php\/dav\/files\/[^/]+/g, + xmlParser = new DOMParser(), + pathRegex = /.*\/remote.php\/dav\/files\/[^/]+/g, - getDavElementsByTagName = (parent, localName) => parent.getElementsByTagNameNS(namespace, localName), - getDavElementByTagName = (parent, localName) => getDavElementsByTagName(parent, localName)?.item(0), - getElementByTagName = (parent, localName) => +parent.getElementsByTagName(localName)?.item(0); + getDavElementsByTagName = (parent, localName) => parent.getElementsByTagNameNS(namespace, localName), + getDavElementByTagName = (parent, localName) => getDavElementsByTagName(parent, localName)?.item(0), + getElementByTagName = (parent, localName) => +parent.getElementsByTagName(localName)?.item(0), - function davFetch(path, options) - { + davFetch = (path, options) => { if (!parent.OC.requestToken) { return Promise.reject(new Error('OC.requestToken missing')); } @@ -44,17 +33,11 @@ }, options); options.headers.requesttoken = parent.OC.requestToken; return fetch(cfg.WebDAV + '/files/' + cfg.UID + path, options); - } + }, - function createDirectory(path) - { - return davFetch(path, { - method: 'MKCOL' - }); - } + createDirectory = path => davFetch(path, { method: 'MKCOL' }), - function fetchFiles(xml, path) - { + fetchFiles = path => { if (!parent.OC.requestToken) { return Promise.reject(new Error('OC.requestToken missing')); } @@ -63,7 +46,7 @@ headers: { 'Content-Type': 'application/xml; charset=utf-8' }, - body: xml + body: propfindBody }) .then(response => (response.status < 400) ? response.text() : Promise.reject(new Error({ response }))) .then(text => { @@ -78,11 +61,9 @@ const e = responseList.item(i), elem = { - id: parseInt(getElementByTagName(e, 'oc:fileid')?.innerHTML ?? 0), name: decodeURIComponent(getDavElementByTagName(e, 'href').innerHTML) .replace(pathRegex, '').replace(/\/$/, ''), - isFile: false, - lastmod: getDavElementByTagName(e, 'getlastmodified').innerHTML + isFile: false } if (getDavElementsByTagName(getDavElementByTagName(e, 'resourcetype'), 'collection').length) { // skip current directory @@ -91,22 +72,16 @@ } } else { elem.isFile = true; - elem.mime = getDavElementByTagName(e, 'getcontenttype').innerHTML; - elem.etag = getDavElementByTagName(e, 'getetag').innerHTML; - elem.size = getDavElementByTagName(e, 'getcontentlength')?.innerHTML; - if (!elem.size) { - elem.size = getElementByTagName(e, 'oc:size')?.innerHTML; - } - elem.haspreview = getElementByTagName(e, 'nc:has-preview')?.innerHTML === 'true'; + elem.size = getDavElementByTagName(e, 'getcontentlength')?.innerHTML + || getElementByTagName(e, 'oc:size')?.innerHTML; } elemList.push(elem); } return Promise.resolve(elemList); }); - } + }, - function buildTree(view, parent, items, path) - { + buildTree = (view, parent, items, path) => { if (items.length) { items.forEach(item => { if (!item.isFile) { @@ -116,7 +91,7 @@ ul = document.createElement('ul'); details.addEventListener('toggle', () => { ul.children.length - || fetchFiles(propertyRequestBody, item.name).then(items => buildTree(view, ul, items, item.name)); + || fetchFiles(item.name).then(items => buildTree(view, ul, items, item.name)); }); summary.textContent = item.name.replace(/^.*\/([^/]+)$/, '$1'); summary.dataset.icon = '📁'; @@ -168,86 +143,81 @@ li.append(btn); parent.append(li); } + }; + +class NextcloudFilesPopupView extends rl.pluginPopupView { + constructor() { + super('NextcloudFiles'); + this.addObservables({ + files: false + }); } - class NextcloudFilesPopupView extends rl.pluginPopupView { - constructor() { - super('NextcloudFiles'); - this.addObservables({ - files: false - }); - } - - onBuild(dom) { - this.tree = dom.querySelector('#sm-nc-files-tree'); - this.tree.addEventListener('click', event => { - let el = event.target; - if (el.matches('button')) { - if ('select' == el.name) { - this.select = this.files() ? [el.item] : el.item_name; - this.close(); - } else if ('create' == el.name) { - let name = el.input.value.replace(/[|\\?*<":>+[]\/&\s]/g, ''); - if (name.length) { - name = el.item_name + '/' + name; - createDirectory(name).then(response => { - if (response.status == 201) { - this.select = name; - this.close(); - } - }); - } + onBuild(dom) { + this.tree = dom.querySelector('#sm-nc-files-tree'); + this.tree.addEventListener('click', event => { + let el = event.target; + if (el.matches('button')) { + if ('select' == el.name) { + this.select = this.files() ? [el.item] : el.item_name; + this.close(); + } else if ('create' == el.name) { + let name = el.input.value.replace(/[|\\?*<":>+[]\/&\s]/g, ''); + if (name.length) { + name = el.item_name + '/' + name; + createDirectory(name).then(response => { + if (response.status == 201) { + this.select = name; + this.close(); + } + }); } } - }); - } + } + }); + } - // Happens after showModal() - beforeShow(files, fResolve) { - this.select = ''; - this.files(!!files); - this.fResolve = fResolve; + // Happens after showModal() + beforeShow(files, fResolve) { + this.select = ''; + this.files(!!files); + this.fResolve = fResolve; - this.tree.innerHTML = ''; - fetchFiles(propertyRequestBody, '/').then(items => { - buildTree(this, this.tree, items, '/'); - }).catch(err => console.error(err)) - } + this.tree.innerHTML = ''; + fetchFiles('/').then(items => { + buildTree(this, this.tree, items, '/'); + }).catch(err => console.error(err)) + } - onHide() { - this.fResolve(this.select); - } + onHide() { + this.fResolve(this.select); + } /* - onShow() {} // Happens after showModal() - beforeShow() {} // Happens before showModal() - afterShow() {} // Happens after showModal() animation transitionend - onHide() {} // Happens before animation transitionend - afterHide() {} // Happens after animation transitionend - close() {} +beforeShow() {} // Happens before showModal() +onShow() {} // Happens after showModal() +afterShow() {} // Happens after showModal() animation transitionend +onHide() {} // Happens before animation transitionend +afterHide() {} // Happens after animation transitionend +close() {} */ - } +} - rl.ncFiles = new class { - async getDirectoryContents(path) { - return await fetchFiles(propertyRequestBody, path); - } +rl.ncFiles = { + selectFolder: () => + new Promise(resolve => { + NextcloudFilesPopupView.showModal([ + false, + folder => resolve(folder), + ]); + }), - selectFolder() { - return new Promise(resolve => { - NextcloudFilesPopupView.showModal([ - false, - folder => resolve(folder), - ]); - }); - } + selectFiles: () => + new Promise(resolve => { + NextcloudFilesPopupView.showModal([ + true, + files => resolve(files), + ]); + }) +}; - selectFiles() { - return new Promise(resolve => { - NextcloudFilesPopupView.showModal([ - true, - files => resolve(files), - ]); - }); - } - } })(window.rl);