@@ -116,16 +116,24 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
116116
117117 private fun groupAllEvents () {
118118 days.forEach { day ->
119+ val dayIndexOnMonthView = day.indexOnMonthView
120+
119121 day.dayEvents.forEach { event ->
120122 // make sure we properly handle events lasting multiple days and repeating ones
121- val lastEvent = allEvents.lastOrNull { it.id == event.id }
122- val daysCnt = getEventLastingDaysCount(event)
123123 val validDayEvent = isDayValid(event, day.code)
124+ val lastEvent = allEvents.lastOrNull { it.id == event.id }
125+ val notYetAddedOrIsRepeatingEvent = lastEvent == null || lastEvent.endTS <= event.startTS
126+
127+ // handle overlapping repeating events e.g. an event that lasts 3 days, but repeats every 2 days has a one day overlap
128+ val canOverlap = event.endTS - event.startTS > event.repeatInterval
129+ val shouldAddEvent = notYetAddedOrIsRepeatingEvent || canOverlap && (lastEvent!! .startTS < event.startTS)
130+
131+ if (shouldAddEvent && ! validDayEvent) {
132+ val daysCnt = getEventLastingDaysCount(event)
124133
125- if ((lastEvent == null || lastEvent.startDayIndex + daysCnt <= findLastDay(event).indexOnMonthView) && ! validDayEvent) {
126134 val monthViewEvent = MonthViewEvent (
127- event.id!! , event.title, event.startTS, event.endTS, event.color, day.indexOnMonthView ,
128- daysCnt, day.indexOnMonthView , event.getIsAllDay(), event.isPastEvent, event.isTask(), event.isTaskCompleted()
135+ event.id!! , event.title, event.startTS, event.endTS, event.color, dayIndexOnMonthView ,
136+ daysCnt, dayIndexOnMonthView , event.getIsAllDay(), event.isPastEvent, event.isTask(), event.isTaskCompleted()
129137 )
130138 allEvents.add(monthViewEvent)
131139 }
@@ -429,12 +437,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
429437 return event.startTS != event.endTS && Formatter .getDateTimeFromTS(event.endTS) == Formatter .getDateTimeFromTS(date.seconds()).withTimeAtStartOfDay()
430438 }
431439
432- private fun findLastDay (event : Event ): DayMonthly {
433- return days.last { day ->
434- day.dayEvents.find { it.id == event.id } != null
435- }
436- }
437-
438440 fun togglePrintMode () {
439441 isPrintVersion = ! isPrintVersion
440442 textColor = if (isPrintVersion) {
0 commit comments