Skip to content

Commit 8779140

Browse files
feat: default full / part day alarm
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
1 parent 520552d commit 8779140

7 files changed

Lines changed: 111 additions & 9 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nextcloud/cdav-library",
3-
"version": "2.2.0",
3+
"version": "2.3.0",
44
"description": "CalDAV and CardDAV client library for Nextcloud",
55
"type": "module",
66
"main": "dist/index.cjs",

src/models/calendar.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ const debug = debugFactory('Calendar')
3030
* - enabled
3131
* - order
3232
* - timezone
33-
* - defaultAlarm
33+
* - defaultAlarmPartDay
34+
* - defaultAlarmFullDay
35+
* - transparency
3436
* - components
3537
*
36-
* The first five allowing read-write access
38+
* The first seven allowing read-write access
3739
*
3840
* @augments DavCollection
3941
*/
@@ -54,7 +56,8 @@ export class Calendar extends davCollectionPublishable(davCollectionShareable(Da
5456
super._exposeProperty('timezone', NS.IETF_CALDAV, 'calendar-timezone', true)
5557
super._exposeProperty('components', NS.IETF_CALDAV, 'supported-calendar-component-set')
5658
super._exposeProperty('transparency', NS.IETF_CALDAV, 'schedule-calendar-transp', true)
57-
super._exposeProperty('defaultAlarm', NS.NEXTCLOUD, 'default-alarm', true)
59+
super._exposeProperty('defaultAlarmPartDay', NS.NEXTCLOUD, 'default-alarm-part-day', true)
60+
super._exposeProperty('defaultAlarmFullDay', NS.NEXTCLOUD, 'default-alarm-full-day', true)
5861
}
5962

6063
/**
@@ -283,7 +286,8 @@ export class Calendar extends davCollectionPublishable(davCollectionShareable(Da
283286
[NS.IETF_CALDAV, 'schedule-calendar-transp'],
284287
[NS.IETF_CALDAV, 'schedule-default-calendar-URL'],
285288
[NS.OWNCLOUD, 'calendar-enabled'],
286-
[NS.NEXTCLOUD, 'default-alarm'],
289+
[NS.NEXTCLOUD, 'default-alarm-part-day'],
290+
[NS.NEXTCLOUD, 'default-alarm-full-day'],
287291
[NS.NEXTCLOUD, 'owner-displayname'],
288292
[NS.NEXTCLOUD, 'trash-bin-retention-duration'],
289293
[NS.NEXTCLOUD, 'deleted-at'],

src/parser.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ export default class Parser {
178178
this.registerParser('{http://owncloud.org/ns}calendar-enabled', Parser.bool)
179179
this.registerParser('{http://owncloud.org/ns}enabled', Parser.bool)
180180
this.registerParser('{http://owncloud.org/ns}read-only', Parser.bool)
181-
this.registerParser('{http://nextcloud.com/ns}default-alarm', Parser.decInt)
181+
this.registerParser('{http://nextcloud.com/ns}default-alarm-part-day', Parser.decInt)
182+
this.registerParser('{http://nextcloud.com/ns}default-alarm-full-day', Parser.decInt)
182183
this.registerParser('{http://nextcloud.com/ns}owner-displayname', Parser.text)
183184
this.registerParser('{http://nextcloud.com/ns}deleted-at', Parser.iso8601DateTime)
184185
this.registerParser('{http://nextcloud.com/ns}calendar-uri', Parser.text)

src/propset/calendarPropSet.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import * as NS from '../utility/namespaceUtility.js'
1818
* - {urn:ietf:params:xml:ns:caldav}calendar-description
1919
* - {urn:ietf:params:xml:ns:caldav}calendar-timezone
2020
* - {http://owncloud.org/ns}calendar-enabled
21-
* - {http://nextcloud.com/ns}default-alarm
21+
* - {http://nextcloud.com/ns}default-alarm-part-day
22+
* - {http://nextcloud.com/ns}default-alarm-full-day
2223
*
2324
* @param {object} props
2425
* @return {object}
@@ -72,9 +73,15 @@ export default function calendarPropSet(props) {
7273
value: value ? '1' : '0',
7374
})
7475
break
75-
case '{http://nextcloud.com/ns}default-alarm':
76+
case '{http://nextcloud.com/ns}default-alarm-part-day':
7677
xmlified.push({
77-
name: [NS.NEXTCLOUD, 'default-alarm'],
78+
name: [NS.NEXTCLOUD, 'default-alarm-part-day'],
79+
value,
80+
})
81+
break
82+
case '{http://nextcloud.com/ns}default-alarm-full-day':
83+
xmlified.push({
84+
name: [NS.NEXTCLOUD, 'default-alarm-full-day'],
7885
value,
7986
})
8087
break

test/unit/models/calendarTest.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,26 @@ END:VCALENDAR
109109
expect(calendar.components).toEqual(['VEVENT', 'VTODO']);
110110
});
111111

112+
it('should inherit expose the property defaultAlarmPartDay', () => {
113+
const parent = new DavCollectionMock();
114+
const request = new RequestMock();
115+
const url = '/foo/bar/folder';
116+
const props = returnDefaultProps();
117+
118+
const calendar = new Calendar(parent, request, url, props);
119+
expect(calendar.defaultAlarmPartDay).toEqual(32400);
120+
});
121+
122+
it('should inherit expose the property defaultAlarmFullDay', () => {
123+
const parent = new DavCollectionMock();
124+
const request = new RequestMock();
125+
const url = '/foo/bar/folder';
126+
const props = returnDefaultProps();
127+
128+
const calendar = new Calendar(parent, request, url, props);
129+
expect(calendar.defaultAlarmFullDay).toEqual(39600);
130+
});
131+
112132
it('should find all VObjects', () => {
113133
const parent = new DavCollectionMock();
114134
const request = new RequestMock();
@@ -446,6 +466,8 @@ function returnDefaultProps() {
446466
],
447467
"{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp" : "opaque",
448468
"{http://owncloud.org/ns}calendar-enabled" : true,
469+
"{http://nextcloud.com/ns}default-alarm-part-day" : 32400,
470+
"{http://nextcloud.com/ns}default-alarm-full-day" : 39600,
449471
"{http://nextcloud.com/ns}owner-displayname" : "admin"
450472
};
451473
}

test/unit/parserTest.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1885,6 +1885,50 @@ END:VALARM`);
18851885
expect(parser.parse(document, node, resolver)).toEqual(false);
18861886
});
18871887

1888+
it('should properly handle {http://nextcloud.com/ns}default-alarm-part-day', () => {
1889+
const parser = new Parser();
1890+
1891+
const xml = `<?xml version="1.0" encoding="utf-8" ?>
1892+
<D:multistatus xmlns:D="DAV:" xmlns:nc="http://nextcloud.com/ns">
1893+
<D:response>
1894+
<D:href>/foo</D:href>
1895+
<D:propstat>
1896+
<D:prop>
1897+
<nc:default-alarm-part-day>32400</nc:default-alarm-part-day>
1898+
</D:prop>
1899+
<D:status>HTTP/1.1 200 OK</D:status>
1900+
</D:propstat>
1901+
</D:response>
1902+
</D:multistatus>`;
1903+
1904+
const [document, node, resolver] = getDocumentNodeResolverFromXML(xml);
1905+
1906+
expect(parser.canParse('{http://nextcloud.com/ns}default-alarm-part-day')).toEqual(true);
1907+
expect(parser.parse(document, node, resolver)).toEqual(32400);
1908+
});
1909+
1910+
it('should properly handle {http://nextcloud.com/ns}default-alarm-full-day', () => {
1911+
const parser = new Parser();
1912+
1913+
const xml = `<?xml version="1.0" encoding="utf-8" ?>
1914+
<D:multistatus xmlns:D="DAV:" xmlns:nc="http://nextcloud.com/ns">
1915+
<D:response>
1916+
<D:href>/foo</D:href>
1917+
<D:propstat>
1918+
<D:prop>
1919+
<nc:default-alarm-full-day>39600</nc:default-alarm-full-day>
1920+
</D:prop>
1921+
<D:status>HTTP/1.1 200 OK</D:status>
1922+
</D:propstat>
1923+
</D:response>
1924+
</D:multistatus>`;
1925+
1926+
const [document, node, resolver] = getDocumentNodeResolverFromXML(xml);
1927+
1928+
expect(parser.canParse('{http://nextcloud.com/ns}default-alarm-full-day')).toEqual(true);
1929+
expect(parser.parse(document, node, resolver)).toEqual(39600);
1930+
});
1931+
18881932
it('should properly handle {http://nextcloud.com/ns}owner-displayname', () => {
18891933
const parser = new Parser();
18901934

test/unit/propset/calendarPropSetTest.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,30 @@ describe('Calendar prop-set', () => {
107107
]);
108108
});
109109

110+
it('should serialize {http://nextcloud.com/ns}default-alarm-part-day correctly', () => {
111+
expect(calendarPropSet({
112+
'{Foo:}bar': 123,
113+
'{http://nextcloud.com/ns}default-alarm-part-day': '32400'
114+
})).toEqual([
115+
{
116+
name: ['http://nextcloud.com/ns', 'default-alarm-part-day'],
117+
value: '32400'
118+
}
119+
]);
120+
});
121+
122+
it('should serialize {http://nextcloud.com/ns}default-alarm-full-day correctly', () => {
123+
expect(calendarPropSet({
124+
'{Foo:}bar': 123,
125+
'{http://nextcloud.com/ns}default-alarm-full-day': '39600'
126+
})).toEqual([
127+
{
128+
name: ['http://nextcloud.com/ns', 'default-alarm-full-day'],
129+
value: '39600'
130+
}
131+
]);
132+
});
133+
110134
it('should serialize {urn:ietf:params:xml:ns:caldav}schedule-calendar-transp correctly - transparent', () => {
111135
expect(calendarPropSet({
112136
'{Foo:}bar': 123,

0 commit comments

Comments
 (0)