@@ -8,48 +8,22 @@ package at.bitfire.ical4android
88
99import androidx.annotation.IntRange
1010import at.bitfire.ical4android.util.DateUtils
11- import at.bitfire.synctools.icalendar.Css3Color
12- import net.fortuna.ical4j.data.CalendarOutputter
13- import net.fortuna.ical4j.model.Calendar
14- import net.fortuna.ical4j.model.DateTime
1511import net.fortuna.ical4j.model.Property
16- import net.fortuna.ical4j.model.TextList
17- import net.fortuna.ical4j.model.TimeZone
1812import net.fortuna.ical4j.model.component.VAlarm
19- import net.fortuna.ical4j.model.component.VToDo
20- import net.fortuna.ical4j.model.property.Categories
2113import net.fortuna.ical4j.model.property.Clazz
22- import net.fortuna.ical4j.model.property.Color
23- import net.fortuna.ical4j.model.property.Comment
2414import net.fortuna.ical4j.model.property.Completed
25- import net.fortuna.ical4j.model.property.Created
26- import net.fortuna.ical4j.model.property.Description
2715import net.fortuna.ical4j.model.property.DtStart
2816import net.fortuna.ical4j.model.property.Due
2917import net.fortuna.ical4j.model.property.Duration
3018import net.fortuna.ical4j.model.property.ExDate
3119import net.fortuna.ical4j.model.property.Geo
32- import net.fortuna.ical4j.model.property.LastModified
33- import net.fortuna.ical4j.model.property.Location
3420import net.fortuna.ical4j.model.property.Organizer
35- import net.fortuna.ical4j.model.property.PercentComplete
3621import net.fortuna.ical4j.model.property.Priority
37- import net.fortuna.ical4j.model.property.ProdId
3822import net.fortuna.ical4j.model.property.RDate
3923import net.fortuna.ical4j.model.property.RRule
4024import net.fortuna.ical4j.model.property.RelatedTo
41- import net.fortuna.ical4j.model.property.Sequence
4225import net.fortuna.ical4j.model.property.Status
43- import net.fortuna.ical4j.model.property.Summary
44- import net.fortuna.ical4j.model.property.Uid
45- import net.fortuna.ical4j.model.property.Url
46- import net.fortuna.ical4j.model.property.Version
47- import java.io.OutputStream
48- import java.net.URI
49- import java.net.URISyntaxException
5026import java.util.LinkedList
51- import java.util.logging.Level
52- import java.util.logging.Logger
5327
5428/* *
5529 * Data class representing a task
@@ -95,106 +69,10 @@ data class Task(
9569 val alarms : LinkedList <VAlarm > = LinkedList (),
9670) : ICalendar() {
9771
98- companion object {
99-
100- private val logger
101- get() = Logger .getLogger(Task ::class .java.name)
102-
103- }
104-
105-
106- /* *
107- * Generates an iCalendar from the Task.
108- *
109- * @param os stream that the iCalendar is written to
110- * @param prodId `PRODID` that identifies the app
111- */
112- fun write (os : OutputStream , prodId : ProdId ) {
113- val ical = Calendar ()
114- ical.properties + = Version .VERSION_2_0
115- ical.properties + = prodId.withUserAgents(userAgents)
116-
117- val vTodo = VToDo (true /* generates DTSTAMP */ )
118- ical.components + = vTodo
119- val props = vTodo.properties
120-
121- uid?.let { props + = Uid (uid) }
122- sequence?.let {
123- if (it != 0 )
124- props + = Sequence (it)
125- }
126-
127- createdAt?.let { props + = Created (DateTime (it)) }
128- lastModified?.let { props + = LastModified (DateTime (it)) }
129-
130- summary?.let { props + = Summary (it) }
131- location?.let { props + = Location (it) }
132- geoPosition?.let { props + = it }
133- description?.let { props + = Description (it) }
134- color?.let { props + = Color (null , Css3Color .nearestMatch(it).name) }
135- url?.let {
136- try {
137- props + = Url (URI (it))
138- } catch (e: URISyntaxException ) {
139- logger.log(Level .WARNING , " Ignoring invalid task URL: $url " , e)
140- }
141- }
142- organizer?.let { props + = it }
143-
144- if (priority != Priority .UNDEFINED .level)
145- props + = Priority (priority)
146- classification?.let { props + = it }
147- status?.let { props + = it }
148-
149- rRule?.let { props + = it }
150- rDates.forEach { props + = it }
151- exDates.forEach { props + = it }
152-
153- if (categories.isNotEmpty())
154- props + = Categories (TextList (categories.toTypedArray()))
155- comment?.let { props + = Comment (it) }
156- props.addAll(relatedTo)
157- props.addAll(unknownProperties)
158-
159- // remember used time zones
160- val usedTimeZones = HashSet <TimeZone >()
161- due?.let {
162- props + = it
163- it.timeZone?.let (usedTimeZones::add)
164- }
165- duration?.let (props::add)
166- dtStart?.let {
167- props + = it
168- it.timeZone?.let (usedTimeZones::add)
169- }
170- completedAt?.let {
171- props + = it
172- it.timeZone?.let (usedTimeZones::add)
173- }
174- percentComplete?.let { props + = PercentComplete (it) }
175-
176- if (alarms.isNotEmpty())
177- vTodo.components.addAll(alarms)
178-
179- // determine earliest referenced date
180- val earliest = arrayOf(
181- dtStart?.date,
182- due?.date,
183- completedAt?.date
184- ).filterNotNull().minOrNull()
185- // add VTIMEZONE components
186- for (tz in usedTimeZones)
187- ical.components + = minifyVTimeZone(tz.vTimeZone, earliest)
188-
189- softValidate(ical)
190- CalendarOutputter (false ).output(ical, os)
191- }
192-
193-
19472 fun isAllDay (): Boolean {
195- return dtStart?.let { DateUtils .isDate(it) } ? :
196- due?.let { DateUtils .isDate(it) } ? :
197- true
73+ return dtStart?.let { DateUtils .isDate(it) }
74+ ? : due?.let { DateUtils .isDate(it) }
75+ ? : true
19876 }
19977
20078}
0 commit comments