Skip to content

Commit 730c3c5

Browse files
authored
Don't include mutators in PRODID anymore (#143)
* Don't include mutators in PRODID anymore; allow PRODID parameters for later * Update ProdIdGenerator documentation - Clarify `generateProdId` parameter and return value descriptions - Improve method description to reflect optional package names usage
1 parent fc0e780 commit 730c3c5

File tree

6 files changed

+32
-20
lines changed

6 files changed

+32
-20
lines changed

lib/src/main/kotlin/at/bitfire/synctools/icalendar/AssociatedComponents.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package at.bitfire.synctools.icalendar
88

99
import net.fortuna.ical4j.model.component.CalendarComponent
1010
import net.fortuna.ical4j.model.component.VEvent
11+
import net.fortuna.ical4j.model.property.ProdId
1112

1213
/**
1314
* Represents a set of components (like VEVENT) stored in a calendar object resource as defined
@@ -33,7 +34,7 @@ import net.fortuna.ical4j.model.component.VEvent
3334
data class AssociatedComponents<T: CalendarComponent>(
3435
val main: T?,
3536
val exceptions: List<T>,
36-
val prodId: String? = null
37+
val prodId: ProdId? = null
3738
) {
3839

3940
init {

lib/src/main/kotlin/at/bitfire/synctools/icalendar/ICalendarGenerator.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import net.fortuna.ical4j.model.component.CalendarComponent
1717
import net.fortuna.ical4j.model.component.VEvent
1818
import net.fortuna.ical4j.model.property.DateProperty
1919
import net.fortuna.ical4j.model.property.DtStart
20-
import net.fortuna.ical4j.model.property.ProdId
2120
import net.fortuna.ical4j.model.property.Version
2221
import java.io.Writer
2322
import javax.annotation.WillNotClose
@@ -40,7 +39,7 @@ class ICalendarGenerator {
4039

4140
// add PRODID
4241
if (event.prodId != null)
43-
ical.properties += ProdId(event.prodId)
42+
ical.properties += event.prodId
4443

4544
// keep record of used timezones and earliest DTSTART to generate minified VTIMEZONEs
4645
var earliestStart: Date? = null

lib/src/main/kotlin/at/bitfire/synctools/mapping/calendar/AndroidEventHandler.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import net.fortuna.ical4j.model.TimeZoneRegistryFactory
3939
import net.fortuna.ical4j.model.component.VEvent
4040
import net.fortuna.ical4j.model.parameter.Value
4141
import net.fortuna.ical4j.model.property.ExDate
42+
import net.fortuna.ical4j.model.property.ProdId
4243
import net.fortuna.ical4j.model.property.RDate
4344
import net.fortuna.ical4j.model.property.RRule
4445
import net.fortuna.ical4j.model.property.RecurrenceId
@@ -172,7 +173,7 @@ class AndroidEventHandler(
172173
}
173174
}
174175

175-
private fun generateProdId(main: Entity): String {
176+
private fun generateProdId(main: Entity): ProdId {
176177
val mutators: String? = main.entityValues.getAsString(Events.MUTATORS)
177178
val packages: List<String> = mutators?.split(MUTATORS_SEPARATOR)?.toList() ?: emptyList()
178179
return prodIdGenerator.generateProdId(packages)

lib/src/main/kotlin/at/bitfire/synctools/mapping/calendar/ProdIdGenerator.kt

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,40 @@
66

77
package at.bitfire.synctools.mapping.calendar
88

9+
import net.fortuna.ical4j.model.ParameterList
10+
import net.fortuna.ical4j.model.property.ProdId
11+
912
fun interface ProdIdGenerator {
1013

1114
/**
12-
* Generates a `PRODID` string using additional package names.
15+
* Generates a `PRODID` string, possibly using additional package names.
1316
*
14-
* @param packages package names that have modified/generated the iCalendar (like `com.example.app.calendar`; may be empty)
17+
* @param packages package names that have modified the entry in the local storage (like `com.example.app.calendar`; may be empty)
1518
*
16-
* @return the full `PRODID` string, with the package names and probably additional information added
17-
* (like `MyApp/1.0 (com.example.app.calendar)`)
19+
* @return the generated `PRODID` property, possibly including additional information (like `PRODID:MyApp/1.0`)
1820
*/
19-
fun generateProdId(packages: List<String>): String
21+
fun generateProdId(packages: List<String>): ProdId
2022

2123
}
2224

2325
class DefaultProdIdGenerator(
24-
private val baseId: String
26+
private val prodId: String
2527
): ProdIdGenerator {
2628

27-
override fun generateProdId(packages: List<String>): String {
28-
val builder = StringBuilder(baseId)
29-
if (packages.isNotEmpty())
30-
builder .append(" (")
31-
.append(packages.joinToString(", "))
32-
.append(")")
33-
return builder.toString()
29+
override fun generateProdId(packages: List<String>): ProdId {
30+
val params = ParameterList()
31+
32+
// check compatibility first
33+
/*if (packages.isNotEmpty()) {
34+
val packagesStr = packages.joinToString(",")
35+
params.add(XParameter(PARAMETER_MUTATORS, packagesStr))
36+
}*/
37+
38+
return ProdId(params, prodId)
3439
}
3540

41+
/*companion object {
42+
const val PARAMETER_MUTATORS = "x-mutators"
43+
}*/
44+
3645
}

lib/src/test/kotlin/at/bitfire/synctools/icalendar/ICalendarGeneratorTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import net.fortuna.ical4j.model.component.VEvent
1313
import net.fortuna.ical4j.model.property.DtEnd
1414
import net.fortuna.ical4j.model.property.DtStamp
1515
import net.fortuna.ical4j.model.property.DtStart
16+
import net.fortuna.ical4j.model.property.ProdId
1617
import net.fortuna.ical4j.model.property.RRule
1718
import net.fortuna.ical4j.model.property.RecurrenceId
1819
import net.fortuna.ical4j.model.property.Uid
@@ -29,7 +30,7 @@ class ICalendarGeneratorTest {
2930
private val tzLondon = tzRegistry.getTimeZone("Europe/London")!!
3031
private val tzUTC = tzRegistry.getTimeZone(TimeZones.UTC_ID)!!
3132

32-
private val userAgent = "TestUA/1.0"
33+
private val userAgent = ProdId("TestUA/1.0")
3334
private val writer = ICalendarGenerator()
3435

3536
@Test

lib/src/test/kotlin/at/bitfire/synctools/mapping/calendar/AndroidEventHandlerTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import net.fortuna.ical4j.model.Property
1717
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1818
import net.fortuna.ical4j.model.property.DtStart
1919
import net.fortuna.ical4j.model.property.ExDate
20+
import net.fortuna.ical4j.model.property.ProdId
2021
import net.fortuna.ical4j.model.property.RRule
2122
import net.fortuna.ical4j.model.property.RecurrenceId
2223
import org.junit.Assert.assertEquals
@@ -192,7 +193,7 @@ class AndroidEventHandlerTest {
192193
exceptions = emptyList()
193194
)
194195
).associatedEvents
195-
assertEquals(javaClass.simpleName, result.prodId)
196+
assertEquals(ProdId(javaClass.simpleName), result.prodId)
196197
}
197198

198199
@Test
@@ -206,7 +207,7 @@ class AndroidEventHandlerTest {
206207
exceptions = emptyList()
207208
)
208209
).associatedEvents
209-
assertEquals("${javaClass.simpleName} (pkg1, pkg2)", result.prodId)
210+
assertEquals(ProdId(javaClass.simpleName), result.prodId)
210211
}
211212

212213

0 commit comments

Comments
 (0)