Collect & simulate hooks
This commit is contained in:
parent
cc2cf0201f
commit
0e380a26ba
4 changed files with 99 additions and 6 deletions
59
index.js
59
index.js
|
|
@ -1,13 +1,62 @@
|
|||
const { fetchNewEvents } = require('./api');
|
||||
const { collectHooks } = require('./hooks');
|
||||
|
||||
require('dotenv').config();
|
||||
|
||||
const state = {};
|
||||
const state = {
|
||||
seenIds: null,
|
||||
mostRecentEventForFolder: null,
|
||||
};
|
||||
|
||||
const getMostRecentEvents = (events, monitoredFolders) => {
|
||||
const mostRecentEventForFolder = events
|
||||
.filter(x => x.data && x.data.folder)
|
||||
.filter(x => monitoredFolders.has(x.data.folder))
|
||||
.reduce(
|
||||
(acc, x) => {
|
||||
const date = new Date(x.time);
|
||||
const existingDate = acc[x.data.folder];
|
||||
acc[x.data.folder] =
|
||||
existingDate && existingDate > date ? existingDate : date;
|
||||
return acc;
|
||||
},
|
||||
state.mostRecentEventForFolder
|
||||
? { ...state.mostRecentEventForFolder }
|
||||
: {}
|
||||
);
|
||||
state.mostRecentEventForFolder = mostRecentEventForFolder;
|
||||
return mostRecentEventForFolder;
|
||||
};
|
||||
|
||||
const convertRecentEventDatesToDelta = () => {
|
||||
const now = new Date().getTime();
|
||||
return Object.entries(state.mostRecentEventForFolder)
|
||||
.map(([folder, date]) => [folder, now - date.getTime()])
|
||||
.reduce((acc, [path, delta]) => {
|
||||
acc[path] = delta;
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
setInterval(async () => {
|
||||
const { events, seenIds } = await fetchNewEvents(state.seenIds);
|
||||
const hooks = await collectHooks();
|
||||
const monitoredFolders = new Set(hooks.map(x => x.folder));
|
||||
const deltaForFolders =
|
||||
getMostRecentEvents(events, monitoredFolders) &&
|
||||
convertRecentEventDatesToDelta();
|
||||
|
||||
hooks
|
||||
.filter(x => deltaForFolders[x.folder])
|
||||
.forEach(hook => {
|
||||
const timeToWait = hook.time - deltaForFolders[hook.folder];
|
||||
console.log(timeToWait);
|
||||
if (timeToWait < 0) {
|
||||
delete state.mostRecentEventForFolder[hook.folder];
|
||||
console.log('running hook', hook);
|
||||
}
|
||||
});
|
||||
|
||||
console.warn(deltaForFolders);
|
||||
state.seenIds = seenIds;
|
||||
events.forEach(event => {
|
||||
console.log(event);
|
||||
});
|
||||
}, 1000);
|
||||
}, 2000);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue