"use strict"; var cmn=require("../$common.js"), persist=require("node-persist"), crypto=require("crypto"), http=require("http"), https=require("https"), URL=require("url"), child_process=require("child_process"); var moddir=null; persist=persist.create({ dir:"persist/changes", continuous:false, interval:false }); persist.initSync(); //urls: map(url => URLobject) //url: String //URLobject: {url, timeline: [[Date, hash, contents]]} var urls=persist.getItemSync("urls"); if(!urls){ urls={}; persist.setItemSync("urls",urls); } else { (function(){ var url,i; for(url in urls){ for(i=0;i"); nwaiting++; fetch("GET",url,function(url,status,body){ nwaiting--; console.log("Got <"+url+">; status = "+status); if(status==-1){ hashes[url]=[new Date(),null,null]; } else { var hash=crypto.createHash("sha256"); hash.update(body); hashes[url]=[new Date(),hash.digest("hex"),body]; } if(!urls[url]){ console.log("WARNING: url <"+url+"> from hashes not found in urls!"); } else { //var last=urls[url].timeline[urls[url].timeline.length-1]; //if(last==undefined||hashes[url][1]==null||hashes[url][1]!=last[1]){ urls[url].timeline.push(hashes[url]); //} } if(nwaiting==0&&cb)process.nextTick(cb); if(refresh_persist_timeout!=null)clearTimeout(refresh_persist_timeout); refresh_persist_timeout=setTimeout(function(){ persist.setItemSync("urls",urls); console.log("(persisted after refresh)") refresh_persist_timeout=null; },2000); }.bind(null,url)); } } function collectLastHashes(){ var lasthashes={}; var idx; for(var url in urls){ if(urls[url].timeline.length==0){ lasthashes[url]=null; } else { idx=urls[url].timeline.length-1; lasthashes[url]={ hash: urls[url].timeline[idx][1], date: urls[url].timeline[idx][0] }; } } return lasthashes; } function sendMail(tomail,body,cb){ var proc=child_process.spawn("sendmail",[tomail],{stdio:["pipe",process.stdout,process.stderr]}); proc.stdin.on("error",function(e){ console.log(e); cb(e); }); proc.stdin.write(body,function(){ proc.stdin.end(); cb(); }); } function constructMailBody(tomail,diffs){ var body="To: "+tomail+"\n"+ "From: changes \n"+ "Subject: changes notification mail\n\n"+ "The changes module recorded some changes in watched webpages.\n"+ "The URLs and their old and new content hashes are shown below.\n\n"; var i; for(i=0;i