"use strict";
let fetch = require('node-fetch'),
Xray = require('x-ray');
let xray = Xray();
function rn() {
return Math.floor(Math.random()*10);
}
let userCache = {};
const contribURL = 'https://en.wiktionary.org/w/index.php?title=Special:Contributions/Hippietrail&offset=&limit=25&target=Hippietrail',
revsURL = "http://en.wiktionary.org/w/api.php?action=query&format=json&prop=revisions&rvprop=timestamp%7Cuserid%7Cuser&rvlimit=10&titles=",
userURL = "http://en.wiktionary.org/w/api.php?action=query&format=json&list=users&usprop=groups&usattachedwiki=&ususers=";
xray(contribURL, '.mw-contributions-list > li', [{
t: '.mw-contributions-title',
c: '.mw-uctop'
}])(function(err, contribs) {
let pagesSeen = [];
contribs.forEach(pg => {
if (pagesSeen.indexOf(pg.t) === -1 && !pg.c) {
fetch(revsURL + encodeURIComponent(pg.t)).then(revs => {
revs.json().then(rj => {
const page = rj.query.pages[Object.keys(rj.query.pages)[0]];
// TODO should stop when it gets to me and fetch more if it
// TODO gets through the list without seeing my name
page.revisions.forEach(r => {
let co = userCache[r.user];
if (!co) co = {};
if (!co.prommie) {
co.prommie = fetch(userURL + r.user);
userCache[r.user] = co;
}
//console.log([0+' '+rn()+' '+r.user, co.prommie]);
/* co.prommie.then(u => {
//console.log(1+' '+rn()+' '+r.user);
//console.log(1.5+' '+rn()+' '+r.user+' '+u.bodyUsed);
// TODO can't call this twice even though we can call
// .then() twice!
let jjj = u.json();
jjj.then(zyx => { console.log(2+' '+rn()+' '+r.user); },uu=>{console.log([99, uu])});
},uu=>{console.log([98, uu])});
*/
co.prommie.then(u => {
console.log(3+' '+rn()+' '+r.user);
if (co.hasOwnProperty('j')) {
console.log('already have coj', co.j);
} else {
let jjj = u.json();
//jjj.then(zyx => { console.log(4+' '+rn()+' '+r.user); },uu=>{console.log([97, uu])});
jjj.then(uj => {
co.j = uj;
console.log(['put coj', userCache[r.user].j]);
console.log(5+' '+rn()+' '+r.user + ' : ' + (uj.query.users[0].groups.indexOf("bot") !== -1));
},uu=>{console.log([96, uu])});
}
},uu=>{console.log([95, uu])}).catch(c => {
console.log('catch', c);
});
});
});
}).catch( e => {
console.log('catching', e);
});
}
pagesSeen.push(pg.t);
});
}),null;