Merge pull request #89 from bershanskiy/nonpersistent

Refactor: make background non-persistent
This commit is contained in:
Ajay Ramachandran
2019-08-10 19:38:29 -04:00
committed by GitHub
2 changed files with 79 additions and 76 deletions

View File

@@ -1,11 +1,3 @@
var previousVideoID = null
//the id of this user, randomly generated once per install
var userID = null;
//the last video id loaded, to make sure it is a video id change
var sponsorVideoID = null;
//when a new tab is highlighted //when a new tab is highlighted
chrome.tabs.onActivated.addListener( chrome.tabs.onActivated.addListener(
function(activeInfo) { function(activeInfo) {
@@ -62,14 +54,39 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
//add help page on install //add help page on install
chrome.runtime.onInstalled.addListener(function (object) { chrome.runtime.onInstalled.addListener(function (object) {
chrome.storage.sync.get(["shownInstallPage"], function(result) { // TODO (shownInstallPage): remove shownInstallPage logic after sufficient amount of time,
let shownInstallPage = result.shownInstallPage; // so that people have time to upgrade and move to shownInstallPage-free code.
if (shownInstallPage == undefined || !shownInstallPage) { chrome.storage.sync.get(["userID", "shownInstallPage"], function(result) {
const userID = result.userID;
// TODO (shownInstallPage): delete row below
const shownInstallPage = result.shownInstallPage;
// If there is no userID, then it is the first install.
if (!userID){
// Show install page, if there is no user id
// and there is no shownInstallPage.
// TODO (shownInstallPage): remove this if statement, but leave contents
if (!shownInstallPage){
//open up the install page //open up the install page
chrome.tabs.create({url: chrome.extension.getURL("/help/index.html")}); chrome.tabs.create({url: chrome.extension.getURL("/help/index.html")});
}
//save that this happened // TODO (shownInstallPage): delete if statement and contents
chrome.storage.sync.set({shownInstallPage: true}); // If shownInstallPage is set, remove it.
if (!!shownInstallPage){
chrome.storage.sync.remove("shownInstallPage");
}
//generate a userID
const newUserID = generateUUID();
//save this UUID
chrome.storage.sync.set({
"userID": newUserID,
"serverAddress": serverAddress,
//the last video id loaded, to make sure it is a video id change
"sponsorVideoID": null,
"previousVideoID": null
});
} }
}); });
}); });
@@ -109,9 +126,12 @@ function addSponsorTime(time, videoID, callback) {
} }
function submitVote(type, UUID, callback) { function submitVote(type, UUID, callback) {
getUserID(function(userID) { chrome.storage.sync.get(["serverAddress", "userID"], function(result) {
const serverAddress = result.serverAddress;
const userID = result.userID;
//publish this vote //publish this vote
sendRequestToServer('GET', "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) { sendRequestToServer("GET", serverAddress + "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback({ callback({
successType: 1 successType: 1
@@ -136,16 +156,17 @@ function submitVote(type, UUID, callback) {
function submitTimes(videoID, callback) { function submitTimes(videoID, callback) {
//get the video times from storage //get the video times from storage
let sponsorTimeKey = 'sponsorTimes' + videoID; let sponsorTimeKey = 'sponsorTimes' + videoID;
chrome.storage.sync.get([sponsorTimeKey], function(result) { chrome.storage.sync.get([sponsorTimeKey, "serverAddress"], function(result) {
let sponsorTimes = result[sponsorTimeKey]; let sponsorTimes = result[sponsorTimeKey];
const serverAddress = result.serverAddress;
const userID = result.userID;
if (sponsorTimes != undefined && sponsorTimes.length > 0) { if (sponsorTimes != undefined && sponsorTimes.length > 0) {
//submit these times //submit these times
for (let i = 0; i < sponsorTimes.length; i++) { for (let i = 0; i < sponsorTimes.length; i++) {
getUserID(function(userIDStorage) {
//submit the sponsorTime //submit the sponsorTime
sendRequestToServer('GET', "/api/postVideoSponsorTimes?videoID=" + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1] sendRequestToServer("GET", serverAddress + "/api/postVideoSponsorTimes?videoID=" + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1]
+ "&userID=" + userIDStorage, function(xmlhttp, error) { + "&userID=" + userID, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && !error) { if (xmlhttp.readyState == 4 && !error) {
callback({ callback({
statusCode: xmlhttp.status statusCode: xmlhttp.status
@@ -170,7 +191,6 @@ function submitTimes(videoID, callback) {
}); });
} }
}); });
});
} }
} }
}); });
@@ -183,11 +203,18 @@ function videoIDChange(currentVideoID, tabId) {
id: currentVideoID id: currentVideoID
}); });
chrome.storage.sync.get(["sponsorVideoID", "previousVideoID"], function(result) {
const sponsorVideoID = result.sponsorVideoID;
const previousVideoID = result.previousVideoID;
//not a url change //not a url change
if (sponsorVideoID == currentVideoID){ if (sponsorVideoID == currentVideoID){
return; return;
} }
sponsorVideoID = currentVideoID;
chrome.storage.sync.set({
"sponsorVideoID": currentVideoID
});
//warn them if they had unsubmitted times //warn them if they had unsubmitted times
if (previousVideoID != null) { if (previousVideoID != null) {
@@ -207,39 +234,14 @@ function videoIDChange(currentVideoID, tabId) {
} }
//set the previous video id to the currentID //set the previous video id to the currentID
previousVideoID = currentVideoID; chrome.storage.sync.set({
"previousVideoID": currentVideoID
});
}); });
} else { } else {
previousVideoID = currentVideoID; chrome.storage.sync.set({
} "previousVideoID": currentVideoID
} });
function getUserID(callback) {
if (userID != null) {
callback(userID);
return;
}
//if it is not cached yet, grab it from storage
chrome.storage.sync.get(["userID"], function(result) {
let userIDStorage = result.userID;
if (userIDStorage != undefined) {
userID = userIDStorage;
callback(userID);
} else {
//double check if a UUID hasn't been created since this was first called
if (userID != null) {
callback(userID);
return;
}
//generate a userID
userID = generateUUID();
//save this UUID
chrome.storage.sync.set({"userID": userID});
callback(userID);
} }
}); });
} }
@@ -247,7 +249,7 @@ function getUserID(callback) {
function sendRequestToServer(type, address, callback) { function sendRequestToServer(type, address, callback) {
let xmlhttp = new XMLHttpRequest(); let xmlhttp = new XMLHttpRequest();
xmlhttp.open(type, serverAddress + address, true); xmlhttp.open(type, address, true);
if (callback != undefined) { if (callback != undefined) {
xmlhttp.onreadystatechange = function () { xmlhttp.onreadystatechange = function () {

View File

@@ -48,7 +48,8 @@
"scripts":[ "scripts":[
"config.js", "config.js",
"background.js" "background.js"
] ],
"persistent": false
}, },
"icons": { "icons": {
"16": "icons/IconSponsorBlocker16px.png", "16": "icons/IconSponsorBlocker16px.png",