Files
UT-Registration-Plus/js/background.js
2018-07-17 01:17:33 -05:00

146 lines
4.3 KiB
JavaScript

/* Handle messages and their commands from content and popup scripts*/
chrome.runtime.onMessage.addListener(function(request, sender, response) {
if(request.command == "courseStorage") {
if(request.action == "add"){
add(request,sender,response);
}
if(request.action == "remove"){
remove(request,sender,response);
}
}
else if(request.command == "isSingleConflict"){
isSingleConflict(request.dtarr,request.unique,response);
}
else if(request.command == "checkConflicts"){
checkConflicts(response);
}
else if(request.command == "alreadyContains"){
alreadyContains(request.unique,response);
}
else{
const xhr = new XMLHttpRequest();
const method = request.method ? request.method.toUpperCase() : "GET";
xhr.open(method, request.url, true);
xhr.onload = () => response(xhr.responseText);
xhr.onerror = () => response(xhr.statusText);
if (method == "POST") {
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}
xhr.send(request.data);
}
return true;
});
/* Initially set the course data in storage */
chrome.runtime.onInstalled.addListener(function() {
var arr = new Array();
chrome.storage.sync.set({savedCourses: arr}, function() {
console.log('initial course list');
});
});
/* Find all the conflicts in the courses and send them out/ if there is even a conflict*/
function checkConflicts(sendResponse) {
chrome.storage.sync.get('savedCourses', function(data) {
var conflicts = [];
var courses = data.savedCourses;
for(var i = 0; i<courses.length;i++){
for(var j=i+1; j<courses.length; j++){
if(isConflict(courses[i].datetimearr,courses[j].datetimearr)){
console.log("conflict");
conflicts.push([courses[i],courses[j]]);
}
}
}
if(conflicts.length == 0){
sendResponse({isConflict:false});
} else {
console.log(conflicts);
sendResponse({isConflict:true,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*/
function isSingleConflict(currdatearr, unique, sendResponse){
chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses;
var conflict = false;
for(var i = 0; i<courses.length;i++){
if(isConflict(currdatearr,courses[i].datetimearr)){
conflict = true;
break;
}
}
var contains = false;
var i = 0;
while(i < courses.length && !contains){
if(courses[i].unique == unique){
contains = true;
}
i++;
}
sendResponse({isConflict:conflict,alreadyContains:contains});
});
}
/* Check if conflict between two date-time-arrs*/
function isConflict(adtarr, bdtarr){
for(var i = 0; i<adtarr.length;i++){
var currday = adtarr[i][0];
var currtimes = adtarr[i][1];
for(var j = 0; j<bdtarr.length;j++){
var nextday = bdtarr[j][0];
var nextimes = bdtarr[j][1];
if(nextday == currday){
if(currtimes[0] < nextimes[1] && currtimes[1] > nextimes[0]){
return true;
}
}
}
}
return false;
}
/* Add the requested course to the storage*/
function add(request, sender, sendResponse) {
chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses;
courses.push(request.course)
console.log(courses);
chrome.storage.sync.set({savedCourses: courses});
sendResponse({done:"Added: ("+request.course.unique+") "+request.course.coursename,label:"Remove Course -"});
});
}
/* Find and Remove the requested course from the storage*/
function remove(request, sender, sendResponse) {
chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses;
console.log(courses);
var index = 0;
console.log(courses.length);
while(index<courses.length && courses[index].unique != request.course.unique){
index++;
}
courses.splice(index,1);
chrome.storage.sync.set({savedCourses: courses});
sendResponse({done:"Removed: ("+request.course.unique+") "+request.course.coursename,label:"Add Course +"});
});
}
/* Find if the unique is already contained within the storage*/
function alreadyContains(unique,sendResponse){
chrome.storage.sync.get('savedCourses', function(data) {
var courses = data.savedCourses;
var contains = false;
var i = 0;
while(i < courses.length && !contains){
if(courses[i].unique == unique){
contains = true;
}
i++;
}
sendResponse({alreadyContains: contains});
});
}