changed refresh time to 16 mins

This commit is contained in:
sghsri
2019-04-30 16:10:06 -05:00
parent 2af93ef4ae
commit fd2fa61c8d
2 changed files with 309 additions and 309 deletions

View File

@@ -1,368 +1,368 @@
updateBadge(true); updateBadge(true);
/* Handle messages and their commands from content and popup scripts*/ /* Handle messages and their commands from content and popup scripts*/
chrome.runtime.onMessage.addListener(function (request, sender, response) { chrome.runtime.onMessage.addListener(function(request, sender, response) {
switch (request.command) { switch (request.command) {
case "courseStorage": case "courseStorage":
if (request.action == "add") { if (request.action == "add") {
add(request, sender, response); add(request, sender, response);
} }
if (request.action == "remove") { if (request.action == "remove") {
remove(request, sender, response); remove(request, sender, response);
} }
break; break;
case "isSingleConflict": case "isSingleConflict":
isSingleConflict(request.dtarr, request.unique, response); isSingleConflict(request.dtarr, request.unique, response);
break; break;
case "checkConflicts": case "checkConflicts":
checkConflicts(response); checkConflicts(response);
break; break;
case "updateBadge": case "updateBadge":
updateBadge(); updateBadge();
break; break;
case "updateStatus": case "updateStatus":
updateStatus(response); updateStatus(response);
break; break;
case "getLine": case "getLine":
getLine(request.dtarr, response); getLine(request.dtarr, response);
break; break;
case "alreadyContains": case "alreadyContains":
alreadyContains(request.unique, response); alreadyContains(request.unique, response);
break; break;
case "updateCourseList": case "updateCourseList":
updateTabs(); updateTabs();
break; break;
default: default:
const xhr = new XMLHttpRequest(); const xhr = new XMLHttpRequest();
const method = request.method ? request.method.toUpperCase() : "GET"; const method = request.method ? request.method.toUpperCase() : "GET";
xhr.open(method, request.url, true); xhr.open(method, request.url, true);
console.log(request); console.log(request);
xhr.onload = () => response(xhr.responseText); xhr.onload = () => response(xhr.responseText);
xhr.onerror = () => response(xhr.statusText); xhr.onerror = () => response(xhr.statusText);
if (method == "POST") { if (method == "POST") {
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
} }
xhr.send(request.data); xhr.send(request.data);
break; break;
} }
return true; return true;
}); });
/* Initially set the course data in storage */ /* Initially set the course data in storage */
chrome.runtime.onInstalled.addListener(function (details) { chrome.runtime.onInstalled.addListener(function(details) {
if (details.reason == "install") { if (details.reason == "install") {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
if (!data.savedCourses) { if (!data.savedCourses) {
var arr = new Array(); var arr = new Array();
chrome.storage.sync.set({ chrome.storage.sync.set({
savedCourses: arr savedCourses: arr
}, function () { }, function() {
console.log('initial course list'); console.log('initial course list');
}); });
chrome.storage.sync.set({ chrome.storage.sync.set({
courseConflictHighlight: true courseConflictHighlight: true
}, function () { }, function() {
console.log('initial highlighting: true'); console.log('initial highlighting: true');
}); });
chrome.storage.sync.set({ chrome.storage.sync.set({
loadAll: true loadAll: true
}, function () { }, function() {
console.log('initial loadAll: true'); console.log('initial loadAll: true');
}); });
} }
}); });
} else if (details.reason == "update") { } else if (details.reason == "update") {
console.log("updated"); console.log("updated");
chrome.storage.sync.get('loadAll', function (data) { chrome.storage.sync.get('loadAll', function(data) {
if (data.loadAll == undefined) { if (data.loadAll == undefined) {
chrome.storage.sync.set({ chrome.storage.sync.set({
loadAll: true loadAll: true
}, function () { }, function() {
console.log('initial loadAll: true'); console.log('initial loadAll: true');
}); });
} }
}); });
} }
}); });
function updateBadge(first) { function updateBadge(first) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
if (data.savedCourses) { if (data.savedCourses) {
let text = ""; let text = "";
if (data.savedCourses.length > 0) { if (data.savedCourses.length > 0) {
text += data.savedCourses.length text += data.savedCourses.length
} }
chrome.browserAction.setBadgeText({ chrome.browserAction.setBadgeText({
text: text text: text
}); });
let timeout = 0; let timeout = 0;
if (!first) { if (!first) {
chrome.browserAction.setBadgeBackgroundColor({ chrome.browserAction.setBadgeBackgroundColor({
color: '#FF5722' color: '#FF5722'
}); });
timeout = 200; timeout = 200;
} }
setTimeout(function () { setTimeout(function() {
chrome.browserAction.setBadgeBackgroundColor({ chrome.browserAction.setBadgeBackgroundColor({
color: '#bf5700' color: '#bf5700'
}); });
}, timeout); }, timeout);
} }
}); });
} }
/* Find all the conflicts in the courses and send them out/ if there is even a conflict*/ /* Find all the conflicts in the courses and send them out/ if there is even a conflict*/
function checkConflicts(sendResponse) { function checkConflicts(sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var conflicts = []; var conflicts = [];
var courses = data.savedCourses; var courses = data.savedCourses;
for (var i = 0; i < courses.length; i++) { for (var i = 0; i < courses.length; i++) {
for (var j = i + 1; j < courses.length; j++) { for (var j = i + 1; j < courses.length; j++) {
if (isConflict(courses[i].datetimearr, courses[j].datetimearr)) { if (isConflict(courses[i].datetimearr, courses[j].datetimearr)) {
console.log("conflict"); console.log("conflict");
conflicts.push([courses[i], courses[j]]); conflicts.push([courses[i], courses[j]]);
} }
} }
} }
if (conflicts.length == 0) { if (conflicts.length == 0) {
sendResponse({ sendResponse({
isConflict: false isConflict: false
}); });
} else { } else {
console.log(conflicts); console.log(conflicts);
sendResponse({ sendResponse({
isConflict: true, isConflict: true,
between: conflicts between: conflicts
}); });
} }
}); });
} }
/* Find if the course at unique and with currdatearr is contained in the saved courses and if it conflicts with any other courses*/ /* Find if the course at unique and with currdatearr is contained in the saved courses and if it conflicts with any other courses*/
function isSingleConflict(currdatearr, unique, sendResponse) { function isSingleConflict(currdatearr, unique, sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses; var courses = data.savedCourses;
var conflict = false; var conflict = false;
for (var i = 0; i < courses.length; i++) { for (var i = 0; i < courses.length; i++) {
if (isConflict(currdatearr, courses[i].datetimearr)) { if (isConflict(currdatearr, courses[i].datetimearr)) {
conflict = true; conflict = true;
break; break;
} }
} }
var contains = false; var contains = false;
var i = 0; var i = 0;
while (i < courses.length && !contains) { while (i < courses.length && !contains) {
if (courses[i].unique == unique) { if (courses[i].unique == unique) {
contains = true; contains = true;
} }
i++; i++;
} }
sendResponse({ sendResponse({
isConflict: conflict, isConflict: conflict,
alreadyContains: contains alreadyContains: contains
}); });
}); });
} }
/* Check if conflict between two date-time-arrs*/ /* Check if conflict between two date-time-arrs*/
function isConflict(adtarr, bdtarr) { function isConflict(adtarr, bdtarr) {
for (var i = 0; i < adtarr.length; i++) { for (var i = 0; i < adtarr.length; i++) {
var currday = adtarr[i][0]; var currday = adtarr[i][0];
var currtimes = adtarr[i][1]; var currtimes = adtarr[i][1];
for (var j = 0; j < bdtarr.length; j++) { for (var j = 0; j < bdtarr.length; j++) {
var nextday = bdtarr[j][0]; var nextday = bdtarr[j][0];
var nextimes = bdtarr[j][1]; var nextimes = bdtarr[j][1];
if (nextday == currday) { if (nextday == currday) {
if (currtimes[0] < nextimes[1] && currtimes[1] > nextimes[0]) { if (currtimes[0] < nextimes[1] && currtimes[1] > nextimes[0]) {
return true; return true;
} }
} }
} }
} }
return false; return false;
} }
/* Add the requested course to the storage*/ /* Add the requested course to the storage*/
function add(request, sender, sendResponse) { function add(request, sender, sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses; var courses = data.savedCourses;
if (!contains(courses, request.course.unique)) { if (!contains(courses, request.course.unique)) {
courses.push(request.course) courses.push(request.course)
console.log(courses); console.log(courses);
chrome.storage.sync.set({ chrome.storage.sync.set({
savedCourses: courses savedCourses: courses
}); });
} }
updateBadge(); updateBadge();
sendResponse({ sendResponse({
done: "Added: (" + request.course.unique + ") " + request.course.coursename, done: "Added: (" + request.course.unique + ") " + request.course.coursename,
label: "Remove Course -" label: "Remove Course -"
}); });
}); });
} }
/* Find and Remove the requested course from the storage*/ /* Find and Remove the requested course from the storage*/
function remove(request, sender, sendResponse) { function remove(request, sender, sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses; var courses = data.savedCourses;
console.log(courses); console.log(courses);
var index = 0; var index = 0;
while (index < courses.length && courses[index].unique != request.course.unique) { while (index < courses.length && courses[index].unique != request.course.unique) {
index++; index++;
} }
courses.splice(index, 1); courses.splice(index, 1);
chrome.storage.sync.set({ chrome.storage.sync.set({
savedCourses: courses savedCourses: courses
}); });
updateBadge(); updateBadge();
sendResponse({ sendResponse({
done: "Removed: (" + request.course.unique + ") " + request.course.coursename, done: "Removed: (" + request.course.unique + ") " + request.course.coursename,
label: "Add Course +" label: "Add Course +"
}); });
}); });
} }
/* Find if the unique is already contained within the storage*/ /* Find if the unique is already contained within the storage*/
function alreadyContains(unique, sendResponse) { function alreadyContains(unique, sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses; var courses = data.savedCourses;
sendResponse({ sendResponse({
alreadyContains: contains(courses, unique) alreadyContains: contains(courses, unique)
}); });
}); });
} }
function contains(courses, unique) { function contains(courses, unique) {
var i = 0; var i = 0;
while (i < courses.length) { while (i < courses.length) {
if (courses[i].unique == unique) { if (courses[i].unique == unique) {
return true; return true;
} }
i++; i++;
} }
return false; return false;
} }
function updateTabs() { function updateTabs() {
chrome.tabs.query({}, function (tabs) { chrome.tabs.query({}, function(tabs) {
for (var i = 0; i < tabs.length; i++) { for (var i = 0; i < tabs.length; i++) {
chrome.tabs.sendMessage(tabs[i].id, { chrome.tabs.sendMessage(tabs[i].id, {
command: "updateCourseList" command: "updateCourseList"
}); });
} }
}); });
} }
const UPDATE_INTERVAL = 1000 * 60; // 1 mins const UPDATE_INTERVAL = 1000 * 60 * 16; // 16 mins
setInterval(updateStatus, UPDATE_INTERVAL); setInterval(updateStatus, UPDATE_INTERVAL);
function updateStatus(sendResponse) { function updateStatus(sendResponse) {
chrome.storage.sync.get('savedCourses', function (data) { chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses; var courses = data.savedCourses;
var nochange = true; var nochange = true;
for (let i = 0; i < courses.length; i++) { for (let i = 0; i < courses.length; i++) {
try { try {
let c = courses[i]; let c = courses[i];
let oldstatus = c.status; let oldstatus = c.status;
let oldlink = c.registerlink; let oldlink = c.registerlink;
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("GET", c.link, false); xhr.open("GET", c.link, false);
xhr.send(); xhr.send();
let result = xhr.responseText; let result = xhr.responseText;
let dummy = document.createElement('html'); let dummy = document.createElement('html');
dummy.innerHTML = result; dummy.innerHTML = result;
let newstatus = dummy.querySelector('[data-th="Status"]').textContent; let newstatus = dummy.querySelector('[data-th="Status"]').textContent;
let registerlink = dummy.querySelector('td[data-th="Add"] a'); let registerlink = dummy.querySelector('td[data-th="Add"] a');
if (registerlink) { if (registerlink) {
registerlink = registerlink.getAttribute('href'); registerlink = registerlink.getAttribute('href');
} }
var haschanged = (newstatus == oldstatus && registerlink == oldlink); var haschanged = (newstatus == oldstatus && registerlink == oldlink);
if (!haschanged) { if (!haschanged) {
console.log(c.unique + 'updated from ' + oldstatus + " to " + newstatus + " and " + oldlink + " to " + registerlink); console.log(c.unique + 'updated from ' + oldstatus + " to " + newstatus + " and " + oldlink + " to " + registerlink);
} }
nochange &= haschanged; nochange &= haschanged;
c.registerlink = registerlink; c.registerlink = registerlink;
c.status = newstatus; c.status = newstatus;
} catch (e) { } catch (e) {
console.log('Not logged into UT Coursebook. Could not update class statuses.'); console.log('Not logged into UT Coursebook. Could not update class statuses.');
} }
} }
if (!nochange) { if (!nochange) {
chrome.storage.sync.set({ chrome.storage.sync.set({
savedCourses: courses savedCourses: courses
}); });
console.log('updated status'); console.log('updated status');
} else { } else {
// console.log('no change'); // console.log('no change');
} }
// console.log("updated status' and registerlinks"); // console.log("updated status' and registerlinks");
}); });
} }
/* Find if the unique is already contained within the storage*/ /* Find if the unique is already contained within the storage*/
function getLine(datetimearr, sendResponse) { function getLine(datetimearr, sendResponse) {
var output = makeLine(datetimearr); var output = makeLine(datetimearr);
console.log(output); console.log(output);
sendResponse({ sendResponse({
line: output line: output
}); });
} }
/* convert from the dtarr and maek the time lines*/ /* convert from the dtarr and maek the time lines*/
function makeLine(datetimearr) { function makeLine(datetimearr) {
//converted times back //converted times back
var output = []; var output = [];
var dtmap = makeMap(datetimearr); var dtmap = makeMap(datetimearr);
var timearr = Array.from(dtmap.keys()); var timearr = Array.from(dtmap.keys());
var dayarr = Array.from(dtmap.values()); var dayarr = Array.from(dtmap.values());
for (var i = 0; i < dayarr.length; i++) { for (var i = 0; i < dayarr.length; i++) {
var place = findLoc(dayarr[i], timearr[i], datetimearr); var place = findLoc(dayarr[i], timearr[i], datetimearr);
var building = place.substring(0, place.search(/\d/) - 1); var building = place.substring(0, place.search(/\d/) - 1);
if (building == "") { if (building == "") {
building = "Undecided Location"; building = "Undecided Location";
} }
output.push([dayarr[i], timearr[i].split(",")[0], timearr[i].split(",")[1], 'https://maps.utexas.edu/buildings/UTM/' + building, place]); output.push([dayarr[i], timearr[i].split(",")[0], timearr[i].split(",")[1], 'https://maps.utexas.edu/buildings/UTM/' + building, place]);
} }
return output; return output;
} }
function makeMap(datetimearr) { function makeMap(datetimearr) {
var dtmap = new Map([]); var dtmap = new Map([]);
for (var i = 0; i < datetimearr.length; i++) { for (var i = 0; i < datetimearr.length; i++) {
//console.log(datetimearr[i][1][0]); //console.log(datetimearr[i][1][0]);
datetimearr[i][1][0] = moment(datetimearr[i][1][0], ["HH:mm A"]).format("h:mm A"); datetimearr[i][1][0] = moment(datetimearr[i][1][0], ["HH:mm A"]).format("h:mm A");
datetimearr[i][1][1] = moment(datetimearr[i][1][1], ["HH:mm A"]).format("h:mm A"); datetimearr[i][1][1] = moment(datetimearr[i][1][1], ["HH:mm A"]).format("h:mm A");
} }
for (var i = 0; i < datetimearr.length; i++) { for (var i = 0; i < datetimearr.length; i++) {
if (dtmap.has(String(datetimearr[i][1]))) { if (dtmap.has(String(datetimearr[i][1]))) {
dtmap.set(String(datetimearr[i][1]), dtmap.get(String(datetimearr[i][1])) + datetimearr[i][0]); dtmap.set(String(datetimearr[i][1]), dtmap.get(String(datetimearr[i][1])) + datetimearr[i][0]);
} else { } else {
dtmap.set(String(datetimearr[i][1]), datetimearr[i][0]); dtmap.set(String(datetimearr[i][1]), datetimearr[i][0]);
} }
} }
return dtmap return dtmap
} }
//find the location of a class given its days and timearrs. //find the location of a class given its days and timearrs.
function findLoc(day, timearr, datetimearr) { function findLoc(day, timearr, datetimearr) {
for (let i = 0; i < datetimearr.length; i++) { for (let i = 0; i < datetimearr.length; i++) {
var dtl = datetimearr[i]; var dtl = datetimearr[i];
// console.log(dtl[1]); // console.log(dtl[1]);
// console.log(timearr); // console.log(timearr);
if (day.includes(dtl[0])) { if (day.includes(dtl[0])) {
if (JSON.stringify(timearr) == JSON.stringify(fixDtl1(dtl[1]))) { if (JSON.stringify(timearr) == JSON.stringify(fixDtl1(dtl[1]))) {
return dtl[2]; return dtl[2];
} }
} }
} }
} }
function fixDtl1(dtl1) { function fixDtl1(dtl1) {
let output = ""; let output = "";
for (let i = 0; i < dtl1.length; i++) { for (let i = 0; i < dtl1.length; i++) {
output += dtl1[i]; output += dtl1[i];
if (i != dtl1.length - 1) { if (i != dtl1.length - 1) {
output += ","; output += ",";
} }
} }
return output; return output;
} }

View File

@@ -10,9 +10,9 @@
<body style="position:relative;"> <body style="position:relative;">
<div class="card" id="header"> <div class="card" id="header">
<div id="buttons" style="padding: 5px 10px 5px 10px;display: flex;justify-content: space-between;"> <div id="buttons" style="padding: 5px 10px 5px 10px;display: flex;justify-content: space-between;">
<button id="clear" class="matbut" style="font-size:medium; background:#4CAF50;margin: 10px;">Clear All</button> <button id="clear" class="matbut" style="font-size:15px; background:#4CAF50;margin: 10px;">Clear All</button>
<button id="schedule" class="matbut" style="font-size:medium;background:#FF9800;margin: 10px;">Course List</button> <button id="schedule" class="matbut" style="font-size:15px;background:#FF9800;margin: 10px;">Course List</button>
<button id="calendar" class="matbut" style="font-size:medium; background: #FF0000; margin:10px;">My Schedule</button> <button id="calendar" class="matbut" style="font-size:15px; background: #FF0000; margin:10px;">My Schedule</button>
</div> </div>
</div> </div>
<div> <div>