MCPcopy
hub / github.com/MagicMirrorOrg/MagicMirror / createEventList

Function createEventList

defaultmodules/calendar/calendar.js:473–601  ·  view source on GitHub ↗

* Creates the sorted list of all events. * @param {boolean} limitNumberOfEntries Whether to filter returned events for display. * @returns {object[]} Array with events.

(limitNumberOfEntries)

Source from the content-addressed store, hash-verified

471 * @returns {object[]} Array with events.
472 */
473 createEventList (limitNumberOfEntries) {
474 let now = moment();
475 let future = now.clone().startOf("day").add(this.config.maximumNumberOfDays, "days");
476
477 let events = [];
478
479 for (const calendarUrl in this.calendarData) {
480 const calendar = this.calendarData[calendarUrl].events;
481 let remainingEntries = this.maximumEntriesForUrl(calendarUrl);
482 let maxPastDaysCompare = now.clone().subtract(this.maximumPastDaysForUrl(calendarUrl), "days");
483 let by_url_calevents = [];
484 for (const e in calendar) {
485 const event = JSON.parse(JSON.stringify(calendar[e])); // clone object
486 const eventStartDateMoment = this.timestampToMoment(event.startDate);
487 const eventEndDateMoment = this.timestampToMoment(event.endDate);
488
489 if (this.config.hidePrivate && event.class === "PRIVATE") {
490 // do not add the current event, skip it
491 continue;
492 }
493 if (limitNumberOfEntries) {
494 if (eventEndDateMoment.isBefore(maxPastDaysCompare)) {
495 continue;
496 }
497 if (this.config.hideOngoing && eventStartDateMoment.isBefore(now)) {
498 continue;
499 }
500 if (this.config.hideDuplicates && this.listContainsEvent(events, event)) {
501 continue;
502 }
503 }
504
505 event.url = calendarUrl;
506 event.today = eventStartDateMoment.isSame(now, "d");
507 event.dayBeforeYesterday = eventStartDateMoment.isSame(now.clone().subtract(2, "days"), "d");
508 event.yesterday = eventStartDateMoment.isSame(now.clone().subtract(1, "days"), "d");
509 event.tomorrow = eventStartDateMoment.isSame(now.clone().add(1, "days"), "d");
510 event.dayAfterTomorrow = eventStartDateMoment.isSame(now.clone().add(2, "days"), "d");
511
512 /*
513 * if sliceMultiDayEvents is set to true, multiday events (events exceeding at least one midnight) are sliced into days,
514 * otherwise, esp. in dateheaders mode it is not clear how long these events are.
515 */
516 const maxCount = eventEndDateMoment.diff(eventStartDateMoment, "days");
517 if (this.config.sliceMultiDayEvents && maxCount > 1) {
518 const splitEvents = [];
519 let midnight
520 = eventStartDateMoment
521 .clone()
522 .startOf("day")
523 .add(1, "day")
524 .endOf("day");
525 let count = 1;
526 while (eventEndDateMoment.isAfter(midnight)) {
527 const thisEvent = JSON.parse(JSON.stringify(event)); // clone object
528 thisEvent.today = this.timestampToMoment(thisEvent.startDate).isSame(now, "d");
529 thisEvent.tomorrow = this.timestampToMoment(thisEvent.startDate).isSame(now.clone().add(1, "days"), "d");
530 thisEvent.endDate = midnight.clone().subtract(1, "day").format("x");

Callers

nothing calls this directly

Calls 2

addMethod · 0.80
parseMethod · 0.80

Tested by

no test coverage detected