refactored database loading and querying to background script

This commit is contained in:
Sriram Hariharan
2019-08-04 13:02:51 -05:00
parent c1cf6dd730
commit 21ca2d4c38
4 changed files with 160 additions and 137 deletions

View File

@@ -1,6 +1,8 @@
updateBadge(true); updateBadge(true);
var grades;
loadDataBase()
/* 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") {
@@ -31,6 +33,8 @@ chrome.runtime.onMessage.addListener(function(request, sender, response) {
case "updateCourseList": case "updateCourseList":
updateTabs(); updateTabs();
break; break;
case "gradesQuery":
executeQuery(request.query, response);
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";
@@ -51,35 +55,35 @@ chrome.runtime.onMessage.addListener(function(request, sender, response) {
}); });
/* 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');
}); });
} }
@@ -88,8 +92,39 @@ chrome.runtime.onInstalled.addListener(function(details) {
}); });
function executeQuery(query, sendResponse) {
console.log(grades)
var res = grades.exec(query)[0];
sendResponse({
data: res,
});
}
/* Load the database*/
function loadDataBase() {
sql = window.SQL;
loadBinaryFile('grades.db', function (data) {
var sqldb = new SQL.Database(data);
grades = sqldb;
});
}
/* load the database from file */
function loadBinaryFile(path, success) {
var xhr = new XMLHttpRequest();
xhr.open("GET", chrome.extension.getURL(path), true);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
var data = new Uint8Array(xhr.response);
var arr = new Array();
for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
success(arr.join(""));
};
xhr.send();
};
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) {
@@ -105,7 +140,7 @@ function updateBadge(first) {
}); });
timeout = 200; timeout = 200;
} }
setTimeout(function() { setTimeout(function () {
chrome.browserAction.setBadgeBackgroundColor({ chrome.browserAction.setBadgeBackgroundColor({
color: '#bf5700' color: '#bf5700'
}); });
@@ -117,7 +152,7 @@ function updateBadge(first) {
/* 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++) {
@@ -144,7 +179,7 @@ function checkConflicts(sendResponse) {
/* 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++) {
@@ -188,7 +223,7 @@ function isConflict(adtarr, bdtarr) {
/* 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)
@@ -206,7 +241,7 @@ function add(request, sender, sendResponse) {
} }
/* 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;
@@ -227,7 +262,7 @@ function remove(request, sender, sendResponse) {
/* 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)
@@ -247,7 +282,7 @@ function contains(courses, unique) {
} }
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"
@@ -260,7 +295,7 @@ const UPDATE_INTERVAL = 1000 * 60 * 16;
setInterval(updateStatus, UPDATE_INTERVAL); setInterval(updateStatus, UPDATE_INTERVAL);
// updateStatus(); // updateStatus();
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++) {
@@ -268,8 +303,10 @@ function updateStatus(sendResponse) {
let c = courses[i]; let c = courses[i];
let oldstatus = c.status; let oldstatus = c.status;
let oldlink = c.link; let oldlink = c.link;
$.ajax({url: oldlink, success: function(result){ $.ajax({
if(result){ url: oldlink,
success: function (result) {
if (result) {
console.log(result); console.log(result);
var object = $('<div/>').html(result).contents(); var object = $('<div/>').html(result).contents();
let newstatus = object.find('[data-th="Status"]').text(); let newstatus = object.find('[data-th="Status"]').text();
@@ -284,7 +321,9 @@ function updateStatus(sendResponse) {
nochange &= haschanged; nochange &= haschanged;
c.registerlink = registerlink; c.registerlink = registerlink;
c.status = newstatus; c.status = newstatus;
}}}); }
}
});
} catch (e) { } catch (e) {

View File

@@ -34,9 +34,6 @@ const butdelay = 75;
console.log('UT Registration Plus is running on this page.'); console.log('UT Registration Plus is running on this page.');
var utplanner = false;
if (document.querySelector('#fos_fl')) { if (document.querySelector('#fos_fl')) {
let params = (new URL(document.location)).searchParams; let params = (new URL(document.location)).searchParams;
let dep = params.get("fos_fl"); let dep = params.get("fos_fl");
@@ -51,25 +48,14 @@ if (document.querySelector('#fos_fl')) {
next = $("#next_nav_link"); next = $("#next_nav_link");
if(next){ if (next) {
chrome.storage.sync.get('loadAll', function (data) { chrome.storage.sync.get('loadAll', function (data) {
if (data.loadAll) { if (data.loadAll) {
$('[title*="next listing"]').remove(); $('[title*="next listing"]').remove();
} }
}); });
} }
if($('html').hasClass('gr__utexas_collegescheduler_com')){
utplanner = true;
$.initialize("table.section-detail-grid", function() {
$(this).find('thead>tr').append('<th> Plus</th')
$(this).find('tbody>tr').each(function(){
$(this).append(`<td data-th="Plus"><input type="image" class="distButton" id="distButton" style="vertical-align: bottom; display:block;" width="20" height="20" src='${chrome.extension.getURL('images/disticon.png')}'/></td>`);
})
});
}
loadDataBase();
//make heading and modal //make heading and modal
if (!$("#kw_results_table").length) { if (!$("#kw_results_table").length) {
$("table thead th:last-child").after('<th scope=col>Plus</th>'); $("table thead th:last-child").after('<th scope=col>Plus</th>');
@@ -470,8 +456,12 @@ function getDistribution(sem) {
query += "and sem like '%" + sem + "%'"; query += "and sem like '%" + sem + "%'";
} }
query += "order by a1+a2+a3+b1+b2+b3+c1+c2+c3+d1+d2+d3+f desc"; query += "order by a1+a2+a3+b1+b2+b3+c1+c2+c3+d1+d2+d3+f desc";
var res = grades.exec(query)[0]; alert(query)
var output = ""; chrome.runtime.sendMessage({
command: "gradesQuery",
query: query
}, function (response) {
var res = response.data;
if (!sem) { if (!sem) {
openDialog(department, coursename, "aggregate", profname, res); openDialog(department, coursename, "aggregate", profname, res);
} else { } else {
@@ -483,14 +473,13 @@ function getDistribution(sem) {
} }
setChart(data); setChart(data);
} }
});
} }
/*Open the modal and show all the data*/ /*Open the modal and show all the data*/
function openDialog(dep, cls, sem, professor, res) { function openDialog(dep, cls, sem, professor, res) {
$("#myModal").fadeIn(fadetime); $("#myModal").fadeIn(fadetime);
//initial text on the "save course button" //initial text on the "save course button"
chrome.runtime.sendMessage({ chrome.runtime.sendMessage({
command: "alreadyContains", command: "alreadyContains",
unique: uniquenum unique: uniquenum
@@ -734,7 +723,9 @@ function getDescription() {
// console.log(window.location.href); // console.log(window.location.href);
// console.log(profurl); // console.log(profurl);
console.log('hello'); console.log('hello');
$.ajax({url: profurl, success: function(response){ $.ajax({
url: profurl,
success: function (response) {
if (response) { if (response) {
console.log(profurl); console.log(profurl);
var output = ""; var output = "";
@@ -785,26 +776,6 @@ function getDescription() {
rmpLink = "http://www.ratemyprofessors.com/campusRatings.jsp?sid=1255"; rmpLink = "http://www.ratemyprofessors.com/campusRatings.jsp?sid=1255";
eCISLink = "http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?"; eCISLink = "http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?";
} }
}}); }
}
/* Load the database*/
function loadDataBase() {
sql = window.SQL;
loadBinaryFile('grades.db', function (data) {
var sqldb = new SQL.Database(data);
grades = sqldb;
}); });
} }
/* load the database from file */
function loadBinaryFile(path, success) {
var xhr = new XMLHttpRequest();
xhr.open("GET", chrome.extension.getURL(path), true);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
var data = new Uint8Array(xhr.response);
var arr = new Array();
for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
success(arr.join(""));
};
xhr.send();
};

9
js/utplanner.js Normal file
View File

@@ -0,0 +1,9 @@
if ($('html').hasClass('gr__utexas_collegescheduler_com')) {
$.initialize("table.section-detail-grid", function () {
console.log('hello')
$(this).find('thead>tr').append('<th> Plus</th')
$(this).find('tbody>tr').each(function () {
$(this).append(`<td data-th="Plus"><input type="image" class="distButton" id="distButton" style="vertical-align: bottom;" width="20" height="20" src='${chrome.extension.getURL('images/disticon.png')}'/></td>`);
})
});
}

View File

@@ -9,15 +9,19 @@
"declarativeContent", "declarativeContent",
"storage", "storage",
"*://*.utdirect.utexas.edu/apps/registrar/course_schedule/*", "*://*.utdirect.utexas.edu/apps/registrar/course_schedule/*",
"*://*.utexas.collegescheduler.com/terms/*/schedules/*", "*://*.utexas.collegescheduler.com/*",
"*://*.catalog.utexas.edu/ribbit/", "*://*.catalog.utexas.edu/ribbit/",
"*://*.registrar.utexas.edu/schedules/*", "*://*.registrar.utexas.edu/schedules/*",
"*://*.login.utexas.edu/login/*" "*://*.login.utexas.edu/login/*"
], ],
"content_scripts": [{ "content_scripts": [{
"css": ["css/styles.css"], "css": ["css/styles.css"],
"js": ["js/moment.min.js", "js/sql-memory-growth.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/jquery.initialize.min.js", "js/content.js"], "js": ["js/moment.min.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/jquery.initialize.min.js", "js/content.js"],
"matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*", "https://utexas.collegescheduler.com/terms/*"] "matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*"]
}, {
"css": ["css/styles.css"],
"js": ["js/moment.min.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/jquery.initialize.min.js", "js/utplanner.js"],
"matches": ["https://utexas.collegescheduler.com/*"]
}, { }, {
"css": ["css/styles.css"], "css": ["css/styles.css"],
"js": ["js/moment.min.js", "js/sql-memory-growth.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/import.js"], "js": ["js/moment.min.js", "js/sql-memory-growth.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/import.js"],
@@ -27,7 +31,7 @@
"grades.db", "images/disticon.png" "grades.db", "images/disticon.png"
], ],
"background": { "background": {
"scripts": ["js/jquery-3.3.1.min.js", "js/background.js", "js/moment.min.js"], "scripts": ["js/jquery-3.3.1.min.js", "js/sql-memory-growth.js", "js/background.js", "js/moment.min.js"],
"persistent": true "persistent": true
}, },
"browser_action": { "browser_action": {