diff --git a/js/chat.js b/js/chat.js index 022310a..67b0a7a 100644 --- a/js/chat.js +++ b/js/chat.js @@ -6,7 +6,13 @@ if(typeof window!="undefined") { var x=new XMLHttpRequest(); x.onreadystatechange=function() { if(x.readyState !== XMLHttpRequest.DONE)return; - cb(null,{statusCode:x.status},x.responseText?JSON.parse(x.responseText):[]); + var headers=x.getAllResponseHeaders().trim().split('\r\n'); + var map={} + for(var i=0;i { return new Promise( (resolve,reject) => { request({ method: 'POST', uri: 'https://'+API.domain_root+'/mobile/'+endpoint+'.json', json:dat}, (error,response,body) => { + LAST_SERVER_DATE=new Date(response.headers.date)/1||-1; if(!error && response.statusCode == 200) resolve(body) else { @@ -124,7 +133,15 @@ Account.prototype.poll=function(ext={}) { ext.before=this.last+0.1; if(ext.after=='last') { ext.after=this.last-0.1; - var five_min_ago=new Date()/1000 - 300; + var five_min_ago; + if(LAST_SERVER_DATE > 0) { + // if we have a last date from the server, we can use it to ensure we don't drift + five_min_ago=LAST_SERVER_DATE/1000 - 300; + } + else { + // reluctantly use local dates + five_min_ago=new Date()/1000 - 300; + } if(ext.after < five_min_ago) ext.after=five_min_ago }