Skip to content

Commit eb0cbec

Browse files
committed
Pass delay to expandOrgDateTime()
1 parent 6261386 commit eb0cbec

File tree

3 files changed

+76
-64
lines changed

3 files changed

+76
-64
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.orgzly.android.util
22

3-
import com.orgzly.org.datetime.OrgInterval
3+
import com.orgzly.android.ui.TimeType
4+
import com.orgzly.android.ui.notes.query.agenda.AgendaItems
5+
import com.orgzly.org.datetime.OrgRange
46
import org.hamcrest.Matchers
57
import org.joda.time.DateTime
68
import org.junit.Assert
@@ -13,22 +15,26 @@ import java.util.*
1315
class AgendaUtilsTest(private val param: Parameter) {
1416

1517
data class Parameter(
18+
val timeType: TimeType,
1619
val rangeStr: String,
1720
val days: Int,
18-
val overdueToday: Boolean,
19-
val warningPeriod: OrgInterval? = null,
2021
val dates: List<DateTime>)
2122

2223
// 2017 May 5, 13:00:00
2324
private val now = GregorianCalendar(2017, Calendar.MAY, 5, 13, 0)
2425

2526
@Test
2627
fun testExpander() {
27-
val expandedDates = AgendaUtils.expandOrgDateTime(
28-
param.rangeStr, DateTime(now), param.days, param.overdueToday, param.warningPeriod)
28+
val range = OrgRange.parse(param.rangeStr)
29+
30+
val expandable = AgendaItems.ExpandableOrgRange.fromRange(param.timeType, range)
31+
32+
val expandedDates = AgendaUtils.expandOrgDateTime(expandable, DateTime(now), param.days)
2933

3034
Assert.assertEquals(param.dates.size.toLong(), expandedDates.size.toLong())
31-
Assert.assertThat(toStringArray(expandedDates), Matchers.`is`(toStringArray(param.dates)))
35+
Assert.assertThat(
36+
toStringArray(expandedDates.toList()),
37+
Matchers.`is`(toStringArray(param.dates)))
3238
}
3339

3440
private fun toStringArray(times: List<DateTime>): List<String>? {
@@ -44,82 +50,82 @@ class AgendaUtilsTest(private val param: Parameter) {
4450
fun data(): Collection<Parameter> {
4551
return listOf(
4652
Parameter(
53+
timeType = TimeType.SCHEDULED,
4754
rangeStr = "<2017-05-03 Wed>--<2017-05-11 Do>",
4855
days = 2,
49-
overdueToday = true,
5056
dates = listOf(
5157
DateTime(2017, 5, 5, 0, 0),
5258
DateTime(2017, 5, 6, 0, 0))),
5359

5460
Parameter(
61+
timeType = TimeType.SCHEDULED,
5562
rangeStr = "<2017-05-03 Wed>--<2017-05-11 Do>",
5663
days = 1,
57-
overdueToday = true,
5864
dates = listOf(
5965
DateTime(2017, 5, 5, 0, 0))),
6066

6167
Parameter(
68+
timeType = TimeType.SCHEDULED,
6269
rangeStr = "<2017-05-06 Sat>--<2017-05-08 Mon>",
6370
days = 10,
64-
overdueToday = true,
6571
dates = listOf(
6672
DateTime(2017, 5, 6, 0, 0),
6773
DateTime(2017, 5, 7, 0, 0),
6874
DateTime(2017, 5, 8, 0, 0))),
6975

7076
Parameter(
77+
timeType = TimeType.SCHEDULED,
7178
rangeStr = "<2017-05-02 Tue ++3d>",
7279
days = 5,
73-
overdueToday = true,
7480
dates = listOf(
7581
DateTime(2017, 5, 5, 0, 0),
7682
DateTime(2017, 5, 8, 0, 0))),
7783

7884
Parameter(
85+
timeType = TimeType.SCHEDULED,
7986
rangeStr = "<2017-05-04 Do>",
8087
days = 5,
81-
overdueToday = true,
8288
dates = listOf(
8389
DateTime(2017, 5, 5, 0, 0))),
8490

8591
Parameter(
92+
timeType = TimeType.SCHEDULED,
8693
rangeStr = "<2017-05-05 Do>",
8794
days = 5,
88-
overdueToday = true,
8995
dates = listOf(
9096
DateTime(2017, 5, 5, 0, 0))),
9197

9298
Parameter(
99+
timeType = TimeType.SCHEDULED,
93100
rangeStr = "<2017-05-06 Do>",
94101
days = 5,
95-
overdueToday = true,
96102
dates = listOf(
97103
DateTime(2017, 5, 6, 0, 0))),
98104

99105
Parameter(
106+
timeType = TimeType.SCHEDULED,
100107
rangeStr = "<2017-05-03 Wed 09:00 ++12h>",
101108
days = 2,
102-
overdueToday = true,
103109
dates = listOf(
104110
DateTime(2017, 5, 5, 0, 0), // overdue
105111
DateTime(2017, 5, 5, 21, 0),
106112
DateTime(2017, 5, 6, 9, 0),
107113
DateTime(2017, 5, 6, 21, 0))),
108114

109115
Parameter(
116+
timeType = TimeType.SCHEDULED,
110117
rangeStr = "<2017-05-05 Fri 09:00 ++12h>",
111118
days = 2,
112-
overdueToday = true,
113119
dates = listOf(
114120
DateTime(2017, 5, 5, 0, 0), // overdue
115121
DateTime(2017, 5, 5, 21, 0),
116122
DateTime(2017, 5, 6, 9, 0),
117123
DateTime(2017, 5, 6, 21, 0))),
118124

119125
Parameter(
126+
timeType = TimeType.SCHEDULED,
120127
rangeStr = "<2017-05-07 Sun 09:00 ++6h>",
121128
days = 4,
122-
overdueToday = true,
123129
dates = listOf(
124130
DateTime(2017, 5, 7, 9, 0),
125131
DateTime(2017, 5, 7, 15, 0),
@@ -130,19 +136,19 @@ class AgendaUtilsTest(private val param: Parameter) {
130136
DateTime(2017, 5, 8, 21, 0))),
131137

132138
Parameter(
139+
timeType = TimeType.SCHEDULED,
133140
rangeStr = "<2017-05-03 Wed 09:00 .+12h>",
134141
days = 2,
135-
overdueToday = true,
136142
dates = listOf(
137143
DateTime(2017, 5, 5, 0, 0), // overdue
138144
DateTime(2017, 5, 5, 21, 0),
139145
DateTime(2017, 5, 6, 9, 0),
140146
DateTime(2017, 5, 6, 21, 0))),
141147

142148
Parameter(
149+
timeType = TimeType.SCHEDULED,
143150
rangeStr = "<2017-05-03 Wed 09:00 +12h>",
144151
days = 3,
145-
overdueToday = true,
146152
dates = listOf(
147153
DateTime(2017, 5, 5, 0, 0), // overdue
148154
DateTime(2017, 5, 5, 21, 0),
@@ -152,48 +158,46 @@ class AgendaUtilsTest(private val param: Parameter) {
152158
DateTime(2017, 5, 7, 21, 0))),
153159

154160
Parameter(
161+
timeType = TimeType.SCHEDULED,
155162
rangeStr = "<2017-05-08 Mon 09:00 +12h>",
156163
days = 5,
157-
overdueToday = true,
158164
dates = listOf(
159165
DateTime(2017, 5, 8, 9, 0),
160166
DateTime(2017, 5, 8, 21, 0),
161167
DateTime(2017, 5, 9, 9, 0),
162168
DateTime(2017, 5, 9, 21, 0))),
163169

164170
Parameter(
171+
timeType = TimeType.SCHEDULED,
165172
rangeStr = "<2017-05-06 Sat +1w>",
166173
days = 5,
167-
overdueToday = true,
168174
dates = listOf(
169175
DateTime(2017, 5, 6, 0, 0))),
170176

171177
Parameter(
178+
timeType = TimeType.SCHEDULED,
172179
rangeStr = "<2017-05-06 Sat +1w>",
173180
days = 10,
174-
overdueToday = true,
175181
dates = listOf(
176182
DateTime(2017, 5, 6, 0, 0),
177183
DateTime(2017, 5, 13, 0, 0))),
178184

179185
Parameter(
186+
timeType = TimeType.EVENT,
180187
rangeStr = "<2017-05-04 Sat +1d>",
181188
days = 3,
182-
overdueToday = false,
183189
dates = listOf(
184190
DateTime(2017, 5, 5, 0, 0),
185191
DateTime(2017, 5, 6, 0, 0),
186192
DateTime(2017, 5, 7, 0, 0))),
187193

188194
Parameter(
195+
timeType = TimeType.DEADLINE,
189196
rangeStr = "<2017-05-10 -4d>",
190197
days = 3,
191-
overdueToday = false,
192-
warningPeriod = OrgInterval(4, OrgInterval.Unit.DAY),
193198
dates = listOf(
194-
DateTime(2017, 5, 6, 0, 0)))
199+
DateTime(2017, 5, 6, 0, 0))) // Warning
195200
)
196201
}
197202
}
198-
199203
}

app/src/main/java/com/orgzly/android/ui/notes/query/agenda/AgendaItems.kt

+33-10
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,34 @@ import com.orgzly.android.query.user.InternalQueryParser
66
import com.orgzly.android.ui.TimeType
77
import com.orgzly.android.util.AgendaUtils
88
import com.orgzly.org.datetime.OrgInterval
9+
import com.orgzly.org.datetime.OrgRange
910
import org.joda.time.DateTime
1011

1112
object AgendaItems {
1213
data class ExpandableOrgRange(
13-
val range: String, val overdueToday: Boolean, val warningPeriod: OrgInterval?)
14+
val range: OrgRange,
15+
val overdueToday: Boolean,
16+
val warningPeriod: OrgInterval?,
17+
val delayPeriod: OrgInterval?) {
18+
19+
companion object {
20+
fun fromRange(timeType: TimeType, range: OrgRange): ExpandableOrgRange {
21+
val overdueToday = timeType == TimeType.SCHEDULED || timeType == TimeType.DEADLINE
22+
23+
val warningPeriod = when (timeType) {
24+
TimeType.DEADLINE -> range.startTime.delay
25+
else -> null
26+
}
27+
28+
val delayPeriod = when (timeType) {
29+
TimeType.SCHEDULED -> range.startTime.delay
30+
else -> null
31+
}
32+
33+
return ExpandableOrgRange(range, overdueToday, warningPeriod, delayPeriod)
34+
}
35+
}
36+
}
1437

1538
fun getList(
1639
notes: List<NoteView>, queryString: String?, idMap: MutableMap<Long, Long>
@@ -58,12 +81,12 @@ object AgendaItems {
5881

5982
notes.forEach { note ->
6083

61-
fun addInstances(timeType: TimeType, timeString: String, overdueToday: Boolean) {
62-
// Expand each note if it has a repeater or is a range
63-
val times = AgendaUtils.expandOrgDateTime(
64-
arrayOf(ExpandableOrgRange(timeString, overdueToday, null)),
65-
now,
66-
agendaDays)
84+
fun addInstances(timeType: TimeType, timeString: String) {
85+
val range = OrgRange.parseOrNull(timeString) ?: return
86+
87+
val expandable = ExpandableOrgRange.fromRange(timeType, range)
88+
89+
val times = AgendaUtils.expandOrgDateTime(expandable, now, agendaDays)
6790

6891
// Add each note instance to its day bucket
6992
times.forEach { time ->
@@ -80,18 +103,18 @@ object AgendaItems {
80103
// Add planning times for a note only once
81104
if (!addedPlanningTimes.contains(note.note.id)) {
82105
note.scheduledRangeString?.let {
83-
addInstances(TimeType.SCHEDULED, it, true)
106+
addInstances(TimeType.SCHEDULED, it)
84107
}
85108
note.deadlineRangeString?.let {
86-
addInstances(TimeType.DEADLINE, it, true)
109+
addInstances(TimeType.DEADLINE, it)
87110
}
88111

89112
addedPlanningTimes.add(note.note.id)
90113
}
91114

92115
// Add each note's event
93116
note.eventString?.let {
94-
addInstances(TimeType.EVENT, it, false)
117+
addInstances(TimeType.EVENT, it)
95118
}
96119
}
97120

app/src/main/java/com/orgzly/android/util/AgendaUtils.kt

+13-28
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,23 @@ import org.joda.time.DateTime
66
import java.util.*
77

88
object AgendaUtils {
9-
fun expandOrgDateTime(
10-
expandableRanges: Array<ExpandableOrgRange>,
11-
now: DateTime,
12-
days: Int
13-
): Set<DateTime> {
14-
15-
val set: MutableSet<DateTime> = TreeSet()
16-
17-
for (expandableRange in expandableRanges) {
18-
OrgRange.parseOrNull(expandableRange.range)?.let {
19-
set.addAll(expandOrgDateTime(
20-
it, expandableRange.overdueToday, expandableRange.warningPeriod, now, days))
21-
}
9+
fun expandOrgDateTime(range: ExpandableOrgRange, now: DateTime, days: Int): Set<DateTime> {
10+
return TreeSet<DateTime>().apply {
11+
addAll(expandOrgDateTime(
12+
range.range,
13+
range.overdueToday,
14+
range.warningPeriod,
15+
range.delayPeriod,
16+
now,
17+
days))
2218
}
23-
24-
return set
25-
}
26-
27-
/** Used by tests. */
28-
fun expandOrgDateTime(
29-
rangeStr: String?,
30-
now: DateTime,
31-
days: Int,
32-
overdueToday: Boolean,
33-
warningPeriod: OrgInterval?
34-
): List<DateTime> {
35-
36-
return expandOrgDateTime(OrgRange.parse(rangeStr), overdueToday, warningPeriod, now, days)
3719
}
3820

3921
private fun expandOrgDateTime(
4022
range: OrgRange,
4123
overdueToday: Boolean,
4224
warningPeriod: OrgInterval?,
25+
delayPeriod: OrgInterval?,
4326
now: DateTime,
4427
days: Int
4528
): List<DateTime> {
@@ -71,7 +54,9 @@ object AgendaUtils {
7154
// If start time has no repeater, use a daily repeater
7255
if (!rangeStart.hasRepeater()) {
7356
val start = DateTime(rangeStart.calendar)
74-
rangeStart = buildOrgDateTimeFromDate(start, OrgRepeater.parse("++1d"))
57+
val repeater = OrgRepeater(OrgRepeater.Type.CATCH_UP, 1, OrgInterval.Unit.DAY)
58+
59+
rangeStart = buildOrgDateTimeFromDate(start, repeater)
7560
}
7661

7762
result.addAll(OrgDateTimeUtils.getTimesInInterval(

0 commit comments

Comments
 (0)