diff --git a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java b/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java index ff9ec5380504bc9e1a6068f010a1a415be349a0a..e209cc1bb3f39a9d9ef98769053c328ae60e1a90 100644 --- a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java +++ b/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java @@ -19,6 +19,9 @@ */ package org.olat.course.nodes.livestream.manager; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -52,15 +55,29 @@ public class LIveStreamServiceImpl implements LiveStreamService { public List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin, int bufferAfterMin) { Date now = new Date(); + + Calendar cFromStartOfDay = Calendar.getInstance(); + cFromStartOfDay.setTime(now); + int year = cFromStartOfDay.get(Calendar.YEAR); + int month = cFromStartOfDay.get(Calendar.MONTH); + int day = cFromStartOfDay.get(Calendar.DATE); + cFromStartOfDay.set(year, month, day - 1, 0, 0, 0); + Date fromStartOfDay = cFromStartOfDay.getTime(); + Calendar cFrom = Calendar.getInstance(); cFrom.setTime(now); cFrom.add(Calendar.MINUTE, -bufferAfterMin); Date from = cFrom.getTime(); + Calendar cTo = Calendar.getInstance(); cTo.setTime(now); cTo.add(Calendar.MINUTE, bufferBeforeMin); Date to = cTo.getTime(); - return getLiveStreamEvents(calendars, from, to); + + // Use start of day to get all day events as well. + return getLiveStreamEvents(calendars, fromStartOfDay, to).stream() + .filter(startedFilter(from)) + .collect(Collectors.toList()); } @Override @@ -79,6 +96,12 @@ public class LIveStreamServiceImpl implements LiveStreamService { .filter(notStartedFilter(from)) .collect(Collectors.toList()); } + + private Predicate<LiveStreamEvent> startedFilter(Date from) { + return (LiveStreamEvent e) -> { + return e.getBegin().before(from); + }; + } private Predicate<LiveStreamEvent> notStartedFilter(Date from) { return (LiveStreamEvent e) -> { @@ -105,6 +128,7 @@ public class LIveStreamServiceImpl implements LiveStreamService { } } } + return liveStreamEvents; } @@ -115,9 +139,12 @@ public class LIveStreamServiceImpl implements LiveStreamService { private LiveStreamEventImpl toLiveStreamEvent(KalendarEvent event, boolean timeOnly) { LiveStreamEventImpl liveStreamEvent = new LiveStreamEventImpl(); liveStreamEvent.setId(event.getID()); - liveStreamEvent.setBegin(event.getBegin()); - liveStreamEvent.setEnd(event.getEnd()); liveStreamEvent.setAllDayEvent(event.isAllDayEvent()); + liveStreamEvent.setBegin(event.getBegin()); + Date end = event.isAllDayEvent() + ? getEndOfDay(event.getEnd()) + : event.getEnd(); + liveStreamEvent.setEnd(end); liveStreamEvent.setLiveStreamUrl(event.getLiveStreamUrl()); if (!timeOnly) { liveStreamEvent.setSubject(event.getSubject()); @@ -127,4 +154,18 @@ public class LIveStreamServiceImpl implements LiveStreamService { return liveStreamEvent; } + private Date getEndOfDay(Date date) { + LocalDateTime localDateTime = dateToLocalDateTime(date); + LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX); + return localDateTimeToDate(endOfDay); + } + + private LocalDateTime dateToLocalDateTime(Date date) { + return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); + } + + private Date localDateTimeToDate(LocalDateTime localDateTime) { + return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + } + }