From 3c258e88576dbc18d1ed1456a9e1bf1053463b3e Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Fri, 6 May 2016 11:08:22 +0200 Subject: show only writable calendars --- css/mail.css | 2 +- js/service/davservice.js | 27 +++++++++++++++++++++++++-- js/views/messageattachment.js | 16 ++++++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/css/mail.css b/css/mail.css index f7ef10dd1..898615f64 100755 --- a/css/mail.css +++ b/css/mail.css @@ -697,7 +697,7 @@ input.submit-message, } .attachment-name { display: inline-block; - width: calc(100% - 110px); + width: calc(100% - 148px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; diff --git a/js/service/davservice.js b/js/service/davservice.js index e91dabb70..a73dfcfa2 100644 --- a/js/service/davservice.js +++ b/js/service/davservice.js @@ -59,14 +59,37 @@ define(function(require) { return parseInt(t.split(' ')[1]); } + function getACLFromResponse(properties) { + var canWrite = false; + var acl = properties['{DAV:}acl']; + if (acl) { + for (var k = 0; k < acl.length; k++) { + var href = acl[k].getElementsByTagNameNS('DAV:', 'href'); + if (href.length === 0) { + continue; + } + href = href[0].textContent; + var writeNode = acl[k].getElementsByTagNameNS('DAV:', 'write'); + if (writeNode.length > 0) { + canWrite = true; + } + } + } + properties.canWrite = canWrite; + } + ; + function getCalendarData(properties) { + getACLFromResponse(properties); + var data = { displayname: properties['{DAV:}displayname'], color: properties['{http://apple.com/ns/ical/}calendar-color'], order: properties['{http://apple.com/ns/ical/}calendar-order'], components: { vevent: false - } + }, + writable: properties.canWrite }; var components = properties['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'] || []; @@ -95,7 +118,7 @@ define(function(require) { } if (getResponseCodeFromHTTPResponse(cal.propStat[0].status) === 200) { var properties = getCalendarData(cal.propStat[0].properties); - if (properties && properties.components.vevent) { + if (properties && properties.components.vevent && properties.writable === true) { properties.url = cal.href; calendars.push(new Calendar(properties)); } diff --git a/js/views/messageattachment.js b/js/views/messageattachment.js index 1aff1ae63..33e12465f 100644 --- a/js/views/messageattachment.js +++ b/js/views/messageattachment.js @@ -99,12 +99,16 @@ define(function(require) { var _this = this; $.when(fetchingCalendars).done(function(calendars) { - _this.ui.attachmentImportPopover.removeClass('hidden'); - var calendarsView = new CalendarsPopoverView({ - collection: calendars - }); - calendarsView.render(); - _this.ui.attachmentImportPopover.html(calendarsView.$el); + if (calendars.length > 0) { + _this.ui.attachmentImportPopover.removeClass('hidden'); + var calendarsView = new CalendarsPopoverView({ + collection: calendars + }); + calendarsView.render(); + _this.ui.attachmentImportPopover.html(calendarsView.$el); + } else { + Radio.ui.trigger('error:show', t('mail', 'No writable calendars found')); + } }); $.when(fetchingCalendars).always(function() { _this.ui.importCalendarEventButton -- cgit v1.2.3