Read the statement by Michael Teeuw here.
2.32.0 Calendar module limitDays and excludedEvents stopped working
-
@sdetweil fair enough, complexity no doubt warranted!
Perhaps is there any reason why shouldEventBeExcluded function might not be getting called at all for me? I’m stumped why after making all these changes including console.log messages, nothing is appearing any different -
-
@AndyHazz can’t think of any, MM is case sensitive, some times people get the case wrong and we don’t report unexpected parms or missing parms…
but you’ve been using that so, it doesn’t shouldn’t be an issue for you
-
@AndyHazz I copied your post in exactly, i reverted back to 2.32 original first
and got the right debug and results
[2025-07-09 16:27:38.473] [DEBUG] Processing entry…
[2025-07-09 16:27:38.473] [DEBUG] title: Dad’s Birthday
[2025-07-09 16:27:38.473] [LOG] should be excluded dad’s birthday birthday false g
[2025-07-09 16:27:38.473] [LOG] event should be excluded = true, dad’s birthday
[2025-07-09 16:27:38.473] [LOG] filter applies result = { excluded: true, until: null }
[2025-07-09 16:27:38.473] [LOG] filter applies returning = { excluded: true, until: null } -
@AndyHazz and
the fetcherutils processes this exclude list very early after getting the events parsed
// loop thru the parsed data, one event at a time Object.entries(data).forEach(([key, event]) => { Log.debug("Processing entry..."); const title = CalendarFetcherUtils.getTitleFromEvent(event); Log.debug(`title: ${title}`); // Return quickly if event should be excluded. let { excluded, eventFilterUntil } = this.shouldEventBeExcluded(config, title); if (excluded) { return; }
-
@sdetweil should I see a console message from loader.js about calendarfetcherutils.js being loaded?
I see
Load script: modules/default/calendar/calendar.js Load script: modules/default/calendar/calendarutils.js
but no mention in the console of calendarfetcherutils.js
-
@AndyHazz no.
-
@sdetweil I’ve no idea then, but if you were able to reproduce the issue I had, and then fix it on your end, I probably just messed something up somewhere and without any access to logs on my docker setup that may remain a mystery … I’ve just had another go at trying to figure out what that may be, no luck.
No rush at all but I guess if you’re happy with the fix it’ll show up in a new MM version at some point and I’ll update to that.
-
@AndyHazz next release isn’t til Oct 1
-
@AndyHazz weird…
-
@AndyHazz would you be willing to test another implementation of the limitDays code fix
another author has changed the code quite a bit,
copy the existing calendar.js so not losing what you have
new codeif (this.config.limitDays > 0 && events.length>0) { // line 708 // Group all events by date, events on the same date will be in a list with the key being the date. Log.info("limitdays starting, events list length=", events.length) const eventsByDate = Object.groupBy(events, (ev) => this.timestampToMoment(ev.startDate).format("YYYY-MM-DD")); Log.info("eventsByDate keys=",Object.keys(eventsByDate)) const newEvents = []; let currentDate = moment().subtract(1,'days'); let daysCollected = 0; while (daysCollected < this.config.limitDays) { const dateStr = currentDate.format("YYYY-MM-DD"); Log.info("limitDays checking=",dateStr) // Check if there are events on the currentDate if (eventsByDate[dateStr]) Log.info("eventsByDate[",dateStr,"] length=",eventsByDate[dateStr].length) if (eventsByDate[dateStr] && eventsByDate[dateStr].length > 0) { // If there are any events today then get all those events and select the currently active events and the events that are starting later in the day. newEvents.push(...eventsByDate[dateStr].filter((ev) => this.timestampToMoment(ev.endDate).isAfter(moment()))); // Since we found a day with events, increase the daysCollected by 1 daysCollected++; Log.info("limitDays, found day with events, count=",daysCollected) } // Search for the next day currentDate.add(1, "day"); } Log.info("limitDays done") events = newEvents; }
this line is unchanged after replacing above code
Log.info(`slicing events total maxcount=${this.config.maximumEntries}`); // this line is unchanged