MediaWiki:Gadget-events.js: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1,823: | Line 1,823: | ||
} | } | ||
// Notifications to send | |||
var notifs = []; | |||
// Latest rotations and settings from localStorage | |||
if (rs.hasLocalStorage()) { | |||
var last = {}; | |||
try { | |||
last = JSON.parse(localStorage.getItem(localLast)); | |||
} catch (err) { | |||
last = {}; | |||
console.warn('Error loading latest rotations from localStorage'); | |||
} | |||
for (var l in last) { | |||
self.lastRot[l] = last[l]; | |||
} | |||
var prefs = {}; | |||
try { | |||
prefs = JSON.parse(localStorage.getItem(localKey)); | |||
} catch (err) { | |||
prefs = {}; | |||
console.warn('Error loading settings (events)'); | |||
} | |||
for (var p in prefs) { | |||
self.settings[p] = prefs[p]; | |||
} | |||
} | |||
// Exit if notifs turned off | |||
if (!self.settings.notifs) { | |||
mw.log('Exiting notifications, they\'ve been disabled'); | |||
return; | |||
} | |||
// Current UTC time | |||
var now = moment.utc(); | |||
// Prevent multiple tabs from updating in short period of time | |||
mw.log( now.diff(moment(self.lastRot.time), 'seconds') ); | |||
if ( now.diff(moment(self.lastRot.time), 'seconds') <= 255 ) { | |||
return; | |||
} else { | |||
self.lastRot.time = now.format(); | |||
} | |||
// VoS | |||
if (now.isBefore( moment(now).startOf('hour').add(10,'minutes') )) { | |||
var vosError = function (jqXHR, status, error) { | |||
console.warn('Error loading VoS:\n' + status + ': ' + error); | |||
}; | |||
var vosSucc = function (vosjson, status, jqXHR) { | |||
if (!vosjson.districts) { | |||
vosError({}, 'Missing districts', 'returned json did not contain a districts array'); | |||
return; | |||
} | |||
var vostext = vosjson.districts[0] + ',' + vosjson.districts[1]; | |||
if (vostext !== self.lastRot.vos) { | |||
self.lastRot.vos = vostext; | |||
var vosnotifs = []; | |||
vosjson.districts.forEach( function (clan) { | |||
if (self.settings.notiftype['vos' + clan] && self.settings.notiftype.vos == 'Some' || self.settings.notiftype.allvos) { | |||
var img = rs.getFileURL(clan + ' Clan.png'); | |||
vosnotifs.push( { title:'VoS ' + clan, opts:{ | |||
badge: img, | |||
body: 'Voice of Seren is now active in the ' + clan + ' district.', | |||
tag: 'vos-' + clan, | |||
icon: img, | |||
image: img, | |||
vibrate: true, | |||
renotify: true, | |||
requireInteraction: false | |||
} } ); | |||
} | |||
}); | |||
self.sendNotifs( vosnotifs, true ); | |||
// Save the last rotations to localstorage if possible | |||
if (rs.hasLocalStorage()) { | |||
var string = JSON.stringify(self.lastRot); | |||
try { | |||
localStorage.setItem(localLast, string); | |||
} catch (err) { | |||
console.warn('Error saving latest rotations to localStorage'); | |||
} | |||
} | |||
} | |||
} | |||
$.ajax({ | |||
dataType: 'json', | |||
url: simplevosurl, | |||
error: vosError, | |||
success: vosSucc | |||
}); | |||
} | |||
}(jQuery, mediaWiki, gswiki)); | }(jQuery, mediaWiki, gswiki)); | ||
//</nowiki> | //</nowiki> | ||