MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    MMM-MyCalendar stopped working on MagicMirror 2.25

    Scheduled Pinned Locked Moved Solved Troubleshooting
    10 Posts 3 Posters 684 Views 3 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      sdetweil @svoe88
      last edited by

      @svoe88 said in config template file not exists:

      ReferenceError: fetcher is not defined
      at fetchCalendar (/home/magic/MagicMirror/modules/MMM-MyCalendar/

      didn’t do the patch right

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      karsten13K S 2 Replies Last reply Reply Quote 0
      • karsten13K Offline
        karsten13 @sdetweil
        last edited by

        title of this thread has nothing to do with the problem

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          sdetweil @karsten13
          last edited by

          @karsten13 I fixed the title

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • S Offline
            svoe88 @sdetweil
            last edited by

            @sdetweil
            How do I get it done?

            S 1 Reply Last reply Reply Quote 0
            • S Offline
              sdetweil @svoe88
              last edited by

              @svoe88 you missed one of the changes in the workaround. the author needs to fix their module.

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              S 1 Reply Last reply Reply Quote 0
              • S Offline
                svoe88 @sdetweil
                last edited by

                @sdetweil
                It works now

                For others it doesn’t work too then I copy this code into calendarutils.js

                cd ~/MagicMirror/modules/MMM-MyCalendar

                /* MagicMirror²
                 * Node Helper: Calendar - CalendarFetcher
                 *
                 * By Michael Teeuw https://michaelteeuw.nl
                 * MIT Licensed.
                 */
                const CalendarUtils = require("./calendarutils");
                const Log = require("logger");
                const NodeHelper = require("node_helper");
                const ical = require("node-ical");
                /*const fetch = require("fetch");*/
                /*const digest = require("digest-fetch");*/
                const https = require("https");
                
                /**
                 *
                 * @param {string} url The url of the calendar to fetch
                 * @param {number} reloadInterval Time in ms the calendar is fetched again
                 * @param {string[]} excludedEvents An array of words / phrases from event titles that will be excluded from being shown.
                 * @param {number} maximumEntries The maximum number of events fetched.
                 * @param {number} maximumNumberOfDays The maximum number of days an event should be in the future.
                 * @param {object} auth The object containing options for authentication against the calendar.
                 * @param {boolean} includePastEvents If true events from the past maximumNumberOfDays will be fetched too
                 * @param {boolean} selfSignedCert If true, the server certificate is not verified against the list of supplied CAs.
                 * @class
                 */
                const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, includePastEvents, selfSignedCert) {
                	let reloadTimer = null;
                	let events = [];
                
                	let fetchFailedCallback = function () {};
                	let eventsReceivedCallback = function () {};
                
                	/**
                	 * Initiates calendar fetch.
                	 */
                	const fetchCalendar = () => {
                		clearTimeout(reloadTimer);
                		reloadTimer = null;
                		const nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]);
                /*		let fetcher = null;*/
                		let httpsAgent = null;
                		let headers = {
                			"User-Agent": "Mozilla/5.0 (Node.js " + nodeVersion + ") MagicMirror/" + global.version
                		};
                
                		if (selfSignedCert) {
                			httpsAgent = new https.Agent({
                				rejectUnauthorized: false
                			});
                		}
                		if (auth) {
                			if (auth.method === "bearer") {
                				headers.Authorization = "Bearer " + auth.pass;
                /*			} else if (auth.method === "digest") {
                				fetcher = new digest(auth.user, auth.pass).fetch(url, { headers: headers, agent: httpsAgent });*/
                			} else {
                				headers.Authorization = "Basic " + Buffer.from(auth.user + ":" + auth.pass).toString("base64");
                			}
                		}
                /*		if (fetcher === null) {
                			fetcher = fetch(url, { headers: headers, agent: httpsAgent });
                		}*/
                
                		fetch(url, { headers: headers, agent: httpsAgent })
                			.then(NodeHelper.checkFetchStatus)
                			.then((response) => response.text())
                			.then((responseData) => {
                				let data = [];
                
                				try {
                					data = ical.parseICS(responseData);
                					Log.debug("parsed data=" + JSON.stringify(data));
                					events = CalendarUtils.filterEvents(data, {
                						excludedEvents,
                						includePastEvents,
                						maximumEntries,
                						maximumNumberOfDays
                					});
                				} catch (error) {
                					fetchFailedCallback(this, error);
                					scheduleTimer();
                					return;
                				}
                				this.broadcastEvents();
                				scheduleTimer();
                			})
                			.catch((error) => {
                				fetchFailedCallback(this, error);
                				scheduleTimer();
                			});
                	};
                
                	/**
                	 * Schedule the timer for the next update.
                	 */
                	const scheduleTimer = function () {
                		clearTimeout(reloadTimer);
                		reloadTimer = setTimeout(function () {
                			fetchCalendar();
                		}, reloadInterval);
                	};
                
                	/* public methods */
                
                	/**
                	 * Initiate fetchCalendar();
                	 */
                	this.startFetch = function () {
                		fetchCalendar();
                	};
                
                	/**
                	 * Broadcast the existing events.
                	 */
                	this.broadcastEvents = function () {
                		Log.info("Calendar-Fetcher: Broadcasting " + events.length + " events.");
                		eventsReceivedCallback(this);
                	};
                
                	/**
                	 * Sets the on success callback
                	 *
                	 * @param {Function} callback The on success callback.
                	 */
                	this.onReceive = function (callback) {
                		eventsReceivedCallback = callback;
                	};
                
                	/**
                	 * Sets the on error callback
                	 *
                	 * @param {Function} callback The on error callback.
                	 */
                	this.onError = function (callback) {
                		fetchFailedCallback = callback;
                	};
                
                	/**
                	 * Returns the url of this fetcher.
                	 *
                	 * @returns {string} The url of this fetcher.
                	 */
                	this.url = function () {
                		return url;
                	};
                
                	/**
                	 * Returns current available events for this fetcher.
                	 *
                	 * @returns {object[]} The current available events for this fetcher.
                	 */
                	this.events = function () {
                		return events;
                	};
                };
                
                module.exports = CalendarFetcher;
                
                1 Reply Last reply Reply Quote 1
                • 1 / 1
                • First post
                  Last post
                Enjoying MagicMirror? Please consider a donation!
                MagicMirror created by Michael Teeuw.
                Forum managed by Sam, technical setup by Karsten.
                This forum is using NodeBB as its core | Contributors
                Contact | Privacy Policy