// ==UserScript==
// @name ET Summary Timer
// @namespace http://tampermonkey.net/
// @version 0.8
// @description Displays crafting timers in Summary menu. Settings available in console via window.et_summaryTimer
// @author Aes Sedai
// @match http*://*.eternitytower.net/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Default settings, use window.et_summaryTimer in console to change settings
// showCrafting: BOOLEAN, default: true; if true, shows a timer for crafting in summary list
// showInscription: BOOLEAN, default: true; if true, shows a timer for inscription in summary list
// showAdventure: BOOLEAN, default: true; if true, shows a timer for adventures in summary list
// showReforging: BOOLEAN, default: true; if true, shows a timer for reforging in summary list
// interval: INTEGER, default: 1000; time in millisecons to wait before refreshing timer
window.et_summaryTimer = {
showCrafting: true,
showInscription: true,
showAdventure: true,
showReforging: true,
interval: 1000
};
if(localStorage.getItem('et_summaryTimer')) window.et_summaryTimer = Object.assign({}, window.et_summaryTimer, JSON.parse(localStorage.getItem('et_summaryTimer')));
$(window).on("beforeunload", function() {
localStorage.setItem('et_summaryTimer', JSON.stringify(window.et_summaryTimer));
});
function getTimeRemaining(endtime) {
let t = Date.parse(endtime) - Date.parse(new Date());
let seconds = Math.floor( (t/1000) % 60 );
let minutes = Math.floor( (t/1000/60) % 60 );
let hours = Math.floor( (t/(1000*60*60)) % 24 );
let days = Math.floor( t/(1000*60*60*24) );
return {
'total': t,
'days': days,
'hours': hours.toString().padStart(2, '0'),
'minutes': minutes.toString().padStart(2, '0'),
'seconds': seconds.toString().padStart(2, '0')
};
}
function formatTimeRemaining(time) {
if(time.days > 0) return time.days + ":" + time.hours + ":" + time.minutes + ":" + time.seconds;
if(time.hours > 0) return time.hours + ":" + time.minutes + ":" + time.seconds;
if(time.minutes > 0) return time.minutes + ":" + time.seconds;
if(time.seconds > 0) return "00:" + time.seconds;
}
function cleanup(summary) {
if($(summary.classSelector).length > 0) $(summary.classSelector).remove();
}
let summaries = [
{classSelector: ".crafting-timer", type: 'crafting', redis: Meteor.connection._mongo_livedata_collections.crafting.find(), rowSelector: ".summary-crafting", active: window.et_summaryTimer.showCrafting},
{classSelector: ".inscription-timer", type: 'crafting', redis: Meteor.connection._mongo_livedata_collections.inscription.find(), rowSelector: ".summary-inscription", active: window.et_summaryTimer.showInscription},
{classSelector: ".adventures-timer", type: 'adventure', redis: Meteor.connection._mongo_livedata_collections.adventures.find(), rowSelector: ".summary-adventures", active: window.et_summaryTimer.showAdventure},
{classSelector: ".reforging-timer", type: 'reforging', redis: Meteor.connection._mongo_livedata_collections.crafting.find(), rowSelector: ".summary-reforging", active: window.et_summaryTimer.showReforging},
];
let interval = setInterval(function() {
summaries.forEach(function(summary) {
if(!summary.active) return;
let elems = null;
if(summary.type == 'crafting') {
let fetch = summary.redis.fetch();
if(fetch.length === 0) {
cleanup(summary);
return;
}
let currentlyCrafting = fetch[0].currentlyCrafting;
if (currentlyCrafting.length === 0) {
cleanup(summary);
return;
}
let firstCraft = currentlyCrafting[0];
if(!firstCraft.hasOwnProperty('endDate')) {
cleanup(summary);
return;
}
elems = currentlyCrafting;
} else if(summary.type == 'adventure') {
let fetch = summary.redis.fetch();
if(fetch.length === 0) {
cleanup(summary);
return;
}
elems = fetch[0].adventures.filter((a) => !!a.startDate && !a.hasOwnProperty('win'));
if(elems.length === 0) {
cleanup(summary);
return;
}
} else if(summary.type == 'reforging') {
let fetch = summary.redis.fetch();
if(fetch.length === 0) {
cleanup(summary);
return;
}
let currentlyReforging = fetch[0].currentlyReforging;
if (currentlyReforging.length === 0) {
cleanup(summary);
return;
}
let firstReforge = currentlyReforging[0];
if(!firstReforge.hasOwnProperty('endDate')) {
cleanup(summary);
return;
}
elems = currentlyReforging;
}
if($(summary.classSelector).length > 0) {
if(elems.length > 1) {
$(summary.classSelector).html(formatTimeRemaining(getTimeRemaining(elems[0].endDate)) + " (" + formatTimeRemaining(getTimeRemaining(elems[elems.length - 1].endDate)) + ")");
} else if(elems.length == 1) {
$(summary.classSelector).html(formatTimeRemaining(getTimeRemaining(elems[0].endDate)));
}
} else if($(summary.rowSelector).length > 0) {
let row = $(summary.rowSelector);
let timeContainer = document.createElement("span");
timeContainer.className = summary.classSelector.replace('.', '');
timeContainer.style.cssText = 'padding-left: 6px;';
if(elems.length > 1) {
timeContainer.innerHTML = formatTimeRemaining(getTimeRemaining(elems[0].endDate) + " (" + formatTimeRemaining(getTimeRemaining(elems[elems.length - 1].endDate)) + ")");
} else if(elems.length == 1) {
timeContainer.innerHTML = formatTimeRemaining(getTimeRemaining(elems[0].endDate));
}
row.after(timeContainer);
}
});
}, window.et_summaryTimer.interval);
})();