mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
321 lines
7.8 KiB
JavaScript
321 lines
7.8 KiB
JavaScript
/*global chrome*/
|
|
|
|
export const openDB = () => {
|
|
return new Promise((resolve, reject) => {
|
|
const request = indexedDB.open("MyDatabase", 1);
|
|
|
|
request.onupgradeneeded = (event) => {
|
|
const db = event.target.result;
|
|
db.createObjectStore("backgrounds", { keyPath: "id" });
|
|
};
|
|
|
|
request.onsuccess = () => {
|
|
resolve(request.result);
|
|
};
|
|
|
|
request.onerror = (event) => {
|
|
reject("Error opening database: " + event.target.errorCode);
|
|
};
|
|
});
|
|
};
|
|
|
|
export const writeData = async (type, data) => {
|
|
const db = await openDB();
|
|
|
|
const tx = db.transaction("backgrounds", "readwrite");
|
|
const store = tx.objectStore("backgrounds");
|
|
const request = await store.put({ id: "customBackground", type, data });
|
|
|
|
return request.result;
|
|
};
|
|
|
|
export const readData = () => {
|
|
return new Promise((resolve, reject) => {
|
|
openDB()
|
|
.then(db => {
|
|
const tx = db.transaction("backgrounds", "readonly");
|
|
const store = tx.objectStore("backgrounds");
|
|
|
|
// Retrieve the custom background
|
|
const getRequest = store.get("customBackground");
|
|
|
|
// Attach success and error event handlers
|
|
getRequest.onsuccess = function(event) {
|
|
resolve(event.target.result);
|
|
};
|
|
|
|
getRequest.onerror = function(event) {
|
|
console.error("An error occurred:", event);
|
|
reject(event);
|
|
};
|
|
})
|
|
.catch(error => {
|
|
console.error("An error occurred:", error);
|
|
reject(error);
|
|
});
|
|
});
|
|
};
|
|
|
|
function ReloadSEQTAPages() {
|
|
chrome.tabs.query({}, function (tabs) {
|
|
for (let tab of tabs) {
|
|
if (tab.title.includes("SEQTA Learn")) {
|
|
chrome.tabs.reload(tab.id);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Helper function to handle setting permissions
|
|
const handleAddPermissions = () => {
|
|
if (typeof chrome.declarativeContent !== "undefined") {
|
|
chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {});
|
|
}
|
|
|
|
chrome.permissions.request(
|
|
{ permissions: ["declarativeContent"], origins: ["*://*/*"] },
|
|
(granted) => {
|
|
if (granted) {
|
|
const rules = [
|
|
// Define your rules here
|
|
];
|
|
|
|
rules.forEach(rule => {
|
|
chrome.declarativeContent.onPageChanged.addRules([rule]);
|
|
});
|
|
|
|
alert("Permissions granted. Reload SEQTA pages to see changes. If this workaround doesn't work, please contact the developer. It will be an easy fix");
|
|
}
|
|
}
|
|
);
|
|
};
|
|
|
|
// Main message listener
|
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|
switch (request.type) {
|
|
case "reloadTabs":
|
|
ReloadSEQTAPages();
|
|
break;
|
|
|
|
case "IndexedDB":
|
|
HandleIntexedDB(request, sendResponse);
|
|
return true;
|
|
|
|
case "currentTab":
|
|
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
|
|
chrome.tabs.sendMessage(tabs[0].id, request, function (response) {
|
|
sendResponse(response);
|
|
});
|
|
});
|
|
return true;
|
|
|
|
case "githubTab":
|
|
chrome.tabs.create({ url: "github.com/SethBurkart123/EvenBetterSEQTA" });
|
|
break;
|
|
|
|
case "setDefaultStorage":
|
|
SetStorageValue(DefaultValues);
|
|
break;
|
|
|
|
case "addPermissions":
|
|
handleAddPermissions();
|
|
break;
|
|
|
|
case "sendNews":
|
|
GetNews(sendResponse);
|
|
return true;
|
|
// eslint-disable-next-line no-unreachable
|
|
break;
|
|
|
|
default:
|
|
console.log("Unknown request type");
|
|
}
|
|
});
|
|
|
|
function HandleIntexedDB(request, sendResponse) {
|
|
switch (request.action) {
|
|
case "write":
|
|
writeData(request.data.type, request.data.data);
|
|
break;
|
|
|
|
case "read":
|
|
readData().then((data) => {
|
|
sendResponse(data);
|
|
});
|
|
return true;
|
|
}
|
|
}
|
|
|
|
function GetNews(sendResponse) {
|
|
// Gets the current date
|
|
const date = new Date();
|
|
|
|
const from =
|
|
date.getFullYear() +
|
|
"-" +
|
|
(date.getMonth() + 1) +
|
|
"-" +
|
|
(date.getDate() - 1);
|
|
|
|
let url = `https://newsapi.org/v2/everything?domains=abc.net.au&from=${from}&apiKey=17c0da766ba347c89d094449504e3080`;
|
|
|
|
fetch(url)
|
|
.then((result) => result.json())
|
|
.then((response) => {
|
|
if (response.code == "rateLimited") {
|
|
url += "%00";
|
|
GetNews();
|
|
} else {
|
|
sendResponse({ news: response });
|
|
}
|
|
});
|
|
}
|
|
|
|
const DefaultValues = {
|
|
onoff: true,
|
|
animatedbk: true,
|
|
bksliderinput: 50,
|
|
lessonalert: true,
|
|
notificationcollector: true,
|
|
defaultmenuorder: [],
|
|
menuitems: {},
|
|
menuorder: [],
|
|
subjectfilters: {},
|
|
selectedColor: "linear-gradient(40deg, rgba(201,61,0,1) 0%, RGBA(170, 5, 58, 1) 100%)",
|
|
DarkMode: true,
|
|
shortcuts: [
|
|
{
|
|
name: "YouTube",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Outlook",
|
|
enabled: true,
|
|
},
|
|
{
|
|
name: "Office",
|
|
enabled: true,
|
|
},
|
|
{
|
|
name: "Spotify",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Google",
|
|
enabled: true,
|
|
},
|
|
{
|
|
name: "DuckDuckGo",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Cool Math Games",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "SACE",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Google Scholar",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Gmail",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Netflix",
|
|
enabled: false,
|
|
},
|
|
{
|
|
name: "Education Perfect",
|
|
enabled: false,
|
|
},
|
|
],
|
|
customshortcuts: [],
|
|
};
|
|
|
|
function SetStorageValue(object) {
|
|
for (var i in object) {
|
|
chrome.storage.local.set({ [i]: object[i] });
|
|
}
|
|
}
|
|
|
|
function UpdateCurrentValues() {
|
|
chrome.storage.local.get(null, function (items) {
|
|
var CurrentValues = items;
|
|
|
|
const NewValue = Object.assign({}, DefaultValues, CurrentValues);
|
|
|
|
function CheckInnerElement(element) {
|
|
for (let i in element) {
|
|
if (typeof element[i] === "object") {
|
|
if (typeof DefaultValues[i].length == "undefined") {
|
|
NewValue[i] = Object.assign({}, DefaultValues[i], CurrentValues[i]);
|
|
} else {
|
|
// If the object is an array, turn it back after
|
|
let length = DefaultValues[i].length;
|
|
NewValue[i] = Object.assign({}, DefaultValues[i], CurrentValues[i]);
|
|
let NewArray = [];
|
|
for (let j = 0; j < length; j++) {
|
|
NewArray.push(NewValue[i][j]);
|
|
}
|
|
NewValue[i] = NewArray;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CheckInnerElement(DefaultValues);
|
|
|
|
if (items["customshortcuts"]) {
|
|
NewValue["customshortcuts"] = items["customshortcuts"];
|
|
}
|
|
|
|
SetStorageValue(NewValue);
|
|
});
|
|
}
|
|
|
|
function migrateOldStorage() {
|
|
chrome.storage.local.get(null, function (items) {
|
|
let shouldUpdate = false; // Flag to check if there is anything to update
|
|
|
|
// Check for the old "Name" field and convert it to "name"
|
|
if (items.shortcuts && items.shortcuts.length > 0 && "Name" in items.shortcuts[0]) {
|
|
shouldUpdate = true;
|
|
items.shortcuts = items.shortcuts.map((shortcut) => {
|
|
return {
|
|
name: shortcut.Name, // Convert "Name" to "name"
|
|
enabled: shortcut.enabled // Keep the "enabled" field as is
|
|
};
|
|
});
|
|
}
|
|
|
|
// Check for "educationperfect" and convert it to "Education Perfect"
|
|
if (items.shortcuts && items.shortcuts.length > 0) {
|
|
for (let shortcut of items.shortcuts) {
|
|
if (shortcut.name === "educationperfect" || shortcut.name === "Education Perfect") {
|
|
shouldUpdate = true;
|
|
shortcut.name = "Education Perfect";
|
|
}
|
|
}
|
|
}
|
|
|
|
// If there"s something to update, set the new values in storage
|
|
if (shouldUpdate) {
|
|
chrome.storage.local.set({ shortcuts: items.shortcuts }, function() {
|
|
console.log("Migration completed.");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
chrome.runtime.onInstalled.addListener(function (event) {
|
|
chrome.storage.local.remove(["justupdated"]);
|
|
UpdateCurrentValues();
|
|
if ( event.reason == "install", event.reason == "update" ) {
|
|
chrome.storage.local.set({ justupdated: true });
|
|
migrateOldStorage();
|
|
}
|
|
});
|