Read the statement by Michael Teeuw here.
Show calendar based on IP Address accessed
-
@Spinster
Withgetip
of @sdetweil andMMM-ModuleMonkeyPatch
, I did it. (You don’t have to modify the original source code for future-proof.)Example.
Server is running on192.168.178.63
and I run 2 clients on192.168.178.22
and192.168.178.63
.
Both 2 clients can show different set of calendars.{ module: "MMM-ModuleMonkeyPatch", config: { patches: [ { module: "calendar", method: "socketNotificationReceived", patch: async function (original, args) { const [ notification, payload ] = args if (notification === "CALENDAR_EVENTS") { const calendarName = this.config.calendars.find((cal) => cal.url === payload?.url)?.name const r = await fetch('http://192.168.178.63:8080/modules/getip') const ip = JSON.parse(await r.text())?.[ 'address' ] ?? null if (!this.config.clientMap?.[ ip ]?.includes(calendarName)) { return original(notification, { ...payload, events: [] }) } } return original(notification, payload) } } ] } }, { module: "getip", }, { module: "calendar", header: "US Holidays", position: "top_left", config: { clientMap: { "192.168.178.63": [ "cal1", "cal2", "cal3" ], "192.168.178.22": ["cal3", "cal4", "cal5"] }, calendars: [ { url: "...", name: "cal1", }, { url: "...", name: "cal2", }, { url: "...", name: "cal3", }, { url: "...", name: "cal4", }, { url: "...", name: "cal5", } ] } },
TO Improve
Whenever notificationCALENDAR_EVENTS
coming,getip
is called. After first execution, to store IP on thelocalStorage
orcookie
would be better. -
@sdetweil will express ipfilter be useful? Similar to whitelist, can we try something
-
@Spinster no… as its in the wrong place… (inside node_helper…) we NEED the ip address to compare with
just get it and return . one time
-
@MMRIZE said in Show calendar based on IP Address accessed:
(You don’t have to modify the original source code for future-proof.)
BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
that have to be processed… this is a bad waste of resources…and this exposes a cal problem, as if u fetch http://xyz on client 1 and client 2 and client 3, we fetch it 3 times. also bad
this could also lead to different clients showing different data between fetchIntervals… -
@sdetweil said in Show calendar based on IP Address accessed:
BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
that have to be processed… this is a bad waste of resources…I Can’t understand your point.
My code is just small injection that does filtering out calendars by condition on socketNotificationReceived. No additional fetching is needed. -
@sdetweil said in Show calendar based on IP Address accessed:
@MMRIZE said in Show calendar based on IP Address accessed:
(You don’t have to modify the original source code for future-proof.)
BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
that have to be processed… this is a bad waste of resources…and this exposes a cal problem, as if u fetch http://xyz on client 1 and client 2 and client 3, we fetch it 3 times. also bad
this could also lead to different clients showing different data between fetchIntervals…Well, if that is the issue, we need a new “calendar” module that can ignore duplicated feed on addCalendar.
Regardless of my code, the original calendar module will fetch a same feed multiply on multi clients. It’s MM’s limitation. -
-
@MMRIZE said in Show calendar based on IP Address accessed:
My code is just small injection that does filtering out calendars by condition on socketNotificationReceived. No additional fetching is needed.
AFTER fetching… so throw away data, which we fetched , knowing we wouldn’t use it…
-
@MMRIZE I tried it, but it is still showing the calendar even if there is no calendar defined for the ip. I edited only the config.js file and added your code. Modified the calendars to suite mine. I could see even if there is no calendar defined for a particular ip. Please advice
-
@sdetweil Is this working? Should I try it, please advice