Loading src/main/java/at/bitfire/ical4android/Event.kt +10 −3 Original line number Diff line number Diff line Loading @@ -238,10 +238,15 @@ class Event: ICalendar() { * @return generated VEvent */ private fun toVEvent(): VEvent { val props = PropertyList<Property>() val event = VEvent(true /* generates DTSTAMP */) val props = event.properties props += Uid(uid) recurrenceId?.let { props += it } sequence?.let { if (it != 0) props += Sequence(it) } sequence?.let { if (it != 0) props += Sequence(it) } summary?.let { props += Summary(it) } location?.let { props += Location(it) } Loading Loading @@ -269,7 +274,9 @@ class Event: ICalendar() { lastModified?.let { props += it } return VEvent(props, ComponentList(alarms)) event.alarms.addAll(alarms) return event } Loading src/main/java/at/bitfire/ical4android/ICalPreprocessor.kt +2 −2 Original line number Diff line number Diff line Loading @@ -38,9 +38,9 @@ object ICalPreprocessor { propertyRules .filter { rule -> rule.supportedType.isAssignableFrom(property::class.java) } .forEach { Constants.log.log(Level.INFO, "Applying rules to ${property.toString()}") Constants.log.log(Level.FINER, "Applying rules to ${property.toString()}") (it as Rfc5545PropertyRule<Property>).applyTo(property) Constants.log.log(Level.INFO, "-> ${property.toString()}") Constants.log.log(Level.FINER, "-> ${property.toString()}") } } Loading src/main/java/at/bitfire/ical4android/Task.kt +13 −13 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ import net.fortuna.ical4j.data.ParserException import net.fortuna.ical4j.model.* import net.fortuna.ical4j.model.Calendar import net.fortuna.ical4j.model.TimeZone import net.fortuna.ical4j.model.component.CalendarComponent import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.component.VToDo import net.fortuna.ical4j.model.property.* Loading Loading @@ -140,9 +139,19 @@ class Task: ICalendar() { fun write(os: OutputStream) { val props = PropertyList<Property>() val ical = Calendar() ical.properties += Version.VERSION_2_0 ical.properties += prodId val vTodo = VToDo(true /* generates DTSTAMP */) ical.components += vTodo val props = vTodo.properties uid?.let { props += Uid(uid) } sequence?.let { if (it != 0) props += Sequence(sequence as Int) } sequence?.let { if (it != 0) props += Sequence(it) } createdAt?.let { props += Created(DateTime(it)) } lastModified?.let { props += LastModified(DateTime(it)) } Loading Loading @@ -192,20 +201,11 @@ class Task: ICalendar() { } percentComplete?.let { props += PercentComplete(it) } // generate VTODO val iCalProps = PropertyList<Property>(2) iCalProps += Version.VERSION_2_0 iCalProps += prodId val vTodo = VToDo(props) if (alarms.isNotEmpty()) vTodo.alarms.addAll(alarms) val iCalComponents = ComponentList<CalendarComponent>(2) iCalComponents.add(vTodo) iCalComponents.addAll(usedTimeZones.map { it.vTimeZone }) ical.components.addAll(usedTimeZones.map { it.vTimeZone }) val ical = Calendar(iCalProps, iCalComponents) CalendarOutputter(false).output(ical, os) } Loading src/test/java/at/bitfire/ical4android/EventTest.kt +29 −0 Original line number Diff line number Diff line Loading @@ -7,8 +7,13 @@ */ package at.bitfire.ical4android import net.fortuna.ical4j.model.Dur import net.fortuna.ical4j.model.TimeZoneRegistryFactory import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.property.DtStart import org.junit.Assert.* import org.junit.Test import java.io.ByteArrayOutputStream import java.io.FileNotFoundException import java.io.InputStreamReader import java.nio.charset.Charset Loading Loading @@ -153,6 +158,30 @@ class EventTest { } /* generating */ @Test fun testWrite() { val e = Event() e.uid = "SAMPLEUID" e.dtStart = DtStart("20190101T100000", TimeZoneRegistryFactory.getInstance().createRegistry().getTimeZone("Europe/Berlin")) e.alarms += VAlarm(Dur(0, -1, 0, 0)) val os = ByteArrayOutputStream() e.write(os) val raw = os.toString(Charsets.UTF_8.name()) assertTrue(raw.contains("PRODID:${ICalendar.prodId.value}")) assertTrue(raw.contains("UID:SAMPLEUID")) assertTrue(raw.contains("DTSTART;TZID=Europe/Berlin:20190101T100000")) assertTrue(raw.contains("DTSTAMP:")) assertTrue(raw.contains("BEGIN:VALARM\r\n" + "TRIGGER:-PT1H\r\n" + "END:VALARM\r\n")) assertTrue(raw.contains("BEGIN:VTIMEZONE")) } /* internal tests */ @Test Loading src/test/java/at/bitfire/ical4android/TaskTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -9,9 +9,11 @@ package at.bitfire.ical4android import net.fortuna.ical4j.model.* import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.parameter.RelType import net.fortuna.ical4j.model.parameter.Value import net.fortuna.ical4j.model.property.* import net.fortuna.ical4j.util.TimeZones import org.junit.Assert.* import org.junit.Test import java.io.ByteArrayInputStream Loading Loading @@ -106,6 +108,30 @@ class TaskTest { } /* generating */ @Test fun testWrite() { val t = Task() t.uid = "SAMPLEUID" t.dtStart = DtStart("20190101T100000", TimeZoneRegistryFactory.getInstance().createRegistry().getTimeZone("Europe/Berlin")) t.alarms += VAlarm(Dur(0, -1, 0, 0)) val os = ByteArrayOutputStream() t.write(os) val raw = os.toString(Charsets.UTF_8.name()) assertTrue(raw.contains("PRODID:${ICalendar.prodId.value}")) assertTrue(raw.contains("UID:SAMPLEUID")) assertTrue(raw.contains("DTSTAMP:")) assertTrue(raw.contains("DTSTART;TZID=Europe/Berlin:20190101T100000")) assertTrue(raw.contains("BEGIN:VALARM\r\n" + "TRIGGER:-PT1H\r\n" + "END:VALARM\r\n")) assertTrue(raw.contains("BEGIN:VTIMEZONE")) } /* helpers */ private fun parseCalendar(fname: String, charset: Charset = Charsets.UTF_8): Task { Loading Loading
src/main/java/at/bitfire/ical4android/Event.kt +10 −3 Original line number Diff line number Diff line Loading @@ -238,10 +238,15 @@ class Event: ICalendar() { * @return generated VEvent */ private fun toVEvent(): VEvent { val props = PropertyList<Property>() val event = VEvent(true /* generates DTSTAMP */) val props = event.properties props += Uid(uid) recurrenceId?.let { props += it } sequence?.let { if (it != 0) props += Sequence(it) } sequence?.let { if (it != 0) props += Sequence(it) } summary?.let { props += Summary(it) } location?.let { props += Location(it) } Loading Loading @@ -269,7 +274,9 @@ class Event: ICalendar() { lastModified?.let { props += it } return VEvent(props, ComponentList(alarms)) event.alarms.addAll(alarms) return event } Loading
src/main/java/at/bitfire/ical4android/ICalPreprocessor.kt +2 −2 Original line number Diff line number Diff line Loading @@ -38,9 +38,9 @@ object ICalPreprocessor { propertyRules .filter { rule -> rule.supportedType.isAssignableFrom(property::class.java) } .forEach { Constants.log.log(Level.INFO, "Applying rules to ${property.toString()}") Constants.log.log(Level.FINER, "Applying rules to ${property.toString()}") (it as Rfc5545PropertyRule<Property>).applyTo(property) Constants.log.log(Level.INFO, "-> ${property.toString()}") Constants.log.log(Level.FINER, "-> ${property.toString()}") } } Loading
src/main/java/at/bitfire/ical4android/Task.kt +13 −13 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ import net.fortuna.ical4j.data.ParserException import net.fortuna.ical4j.model.* import net.fortuna.ical4j.model.Calendar import net.fortuna.ical4j.model.TimeZone import net.fortuna.ical4j.model.component.CalendarComponent import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.component.VToDo import net.fortuna.ical4j.model.property.* Loading Loading @@ -140,9 +139,19 @@ class Task: ICalendar() { fun write(os: OutputStream) { val props = PropertyList<Property>() val ical = Calendar() ical.properties += Version.VERSION_2_0 ical.properties += prodId val vTodo = VToDo(true /* generates DTSTAMP */) ical.components += vTodo val props = vTodo.properties uid?.let { props += Uid(uid) } sequence?.let { if (it != 0) props += Sequence(sequence as Int) } sequence?.let { if (it != 0) props += Sequence(it) } createdAt?.let { props += Created(DateTime(it)) } lastModified?.let { props += LastModified(DateTime(it)) } Loading Loading @@ -192,20 +201,11 @@ class Task: ICalendar() { } percentComplete?.let { props += PercentComplete(it) } // generate VTODO val iCalProps = PropertyList<Property>(2) iCalProps += Version.VERSION_2_0 iCalProps += prodId val vTodo = VToDo(props) if (alarms.isNotEmpty()) vTodo.alarms.addAll(alarms) val iCalComponents = ComponentList<CalendarComponent>(2) iCalComponents.add(vTodo) iCalComponents.addAll(usedTimeZones.map { it.vTimeZone }) ical.components.addAll(usedTimeZones.map { it.vTimeZone }) val ical = Calendar(iCalProps, iCalComponents) CalendarOutputter(false).output(ical, os) } Loading
src/test/java/at/bitfire/ical4android/EventTest.kt +29 −0 Original line number Diff line number Diff line Loading @@ -7,8 +7,13 @@ */ package at.bitfire.ical4android import net.fortuna.ical4j.model.Dur import net.fortuna.ical4j.model.TimeZoneRegistryFactory import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.property.DtStart import org.junit.Assert.* import org.junit.Test import java.io.ByteArrayOutputStream import java.io.FileNotFoundException import java.io.InputStreamReader import java.nio.charset.Charset Loading Loading @@ -153,6 +158,30 @@ class EventTest { } /* generating */ @Test fun testWrite() { val e = Event() e.uid = "SAMPLEUID" e.dtStart = DtStart("20190101T100000", TimeZoneRegistryFactory.getInstance().createRegistry().getTimeZone("Europe/Berlin")) e.alarms += VAlarm(Dur(0, -1, 0, 0)) val os = ByteArrayOutputStream() e.write(os) val raw = os.toString(Charsets.UTF_8.name()) assertTrue(raw.contains("PRODID:${ICalendar.prodId.value}")) assertTrue(raw.contains("UID:SAMPLEUID")) assertTrue(raw.contains("DTSTART;TZID=Europe/Berlin:20190101T100000")) assertTrue(raw.contains("DTSTAMP:")) assertTrue(raw.contains("BEGIN:VALARM\r\n" + "TRIGGER:-PT1H\r\n" + "END:VALARM\r\n")) assertTrue(raw.contains("BEGIN:VTIMEZONE")) } /* internal tests */ @Test Loading
src/test/java/at/bitfire/ical4android/TaskTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -9,9 +9,11 @@ package at.bitfire.ical4android import net.fortuna.ical4j.model.* import net.fortuna.ical4j.model.component.VAlarm import net.fortuna.ical4j.model.parameter.RelType import net.fortuna.ical4j.model.parameter.Value import net.fortuna.ical4j.model.property.* import net.fortuna.ical4j.util.TimeZones import org.junit.Assert.* import org.junit.Test import java.io.ByteArrayInputStream Loading Loading @@ -106,6 +108,30 @@ class TaskTest { } /* generating */ @Test fun testWrite() { val t = Task() t.uid = "SAMPLEUID" t.dtStart = DtStart("20190101T100000", TimeZoneRegistryFactory.getInstance().createRegistry().getTimeZone("Europe/Berlin")) t.alarms += VAlarm(Dur(0, -1, 0, 0)) val os = ByteArrayOutputStream() t.write(os) val raw = os.toString(Charsets.UTF_8.name()) assertTrue(raw.contains("PRODID:${ICalendar.prodId.value}")) assertTrue(raw.contains("UID:SAMPLEUID")) assertTrue(raw.contains("DTSTAMP:")) assertTrue(raw.contains("DTSTART;TZID=Europe/Berlin:20190101T100000")) assertTrue(raw.contains("BEGIN:VALARM\r\n" + "TRIGGER:-PT1H\r\n" + "END:VALARM\r\n")) assertTrue(raw.contains("BEGIN:VTIMEZONE")) } /* helpers */ private fun parseCalendar(fname: String, charset: Charset = Charsets.UTF_8): Task { Loading