Improve refresh logic and fix bugs

This commit is contained in:
MusicalBean 2023-08-26 22:30:09 -07:00
parent cfc97a0be5
commit 476538e994
8 changed files with 77 additions and 12 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "encora-tools", "name": "encora-tools",
"version": "0.1.0", "version": "0.1",
"description": "Adds extra features to the Encora trading site.", "description": "Adds extra features to the Encora trading site.",
"private": true, "private": true,
"repository": "https://github.com/musicalbean/encora-tools.git", "repository": "https://github.com/musicalbean/encora-tools.git",

View File

@ -1,6 +1,6 @@
import 'emoji-log'; import { browser } from "webextension-polyfill-ts";
import {browser} from 'webextension-polyfill-ts'; import TraderRepository from "../ContentScript/trader-repository";
browser.runtime.onInstalled.addListener((): void => { browser.runtime.onInstalled.addListener((): void => {
console.emoji('🦄', 'extension installed'); TraderRepository.refreshGlobalTradersStorage();
}); });

View File

@ -2,6 +2,8 @@ import TradeFinderEnhancer from "./page-enhancers/trade-finder-enhancer";
import TradeFinderTheirsEnhancer from "./page-enhancers/trade-finder-theirs-enhancer"; import TradeFinderTheirsEnhancer from "./page-enhancers/trade-finder-theirs-enhancer";
import WhoOwnsEnhancer from "./page-enhancers/who-owns-enhancer"; import WhoOwnsEnhancer from "./page-enhancers/who-owns-enhancer";
import WhoWantsEnhancer from "./page-enhancers/who-wants-enhancer"; import WhoWantsEnhancer from "./page-enhancers/who-wants-enhancer";
import Settings from "./settings";
import TraderRepository from "./trader-repository";
if (window.location.href.includes("who-owns.php")) { if (window.location.href.includes("who-owns.php")) {
WhoOwnsEnhancer.enhance(document); WhoOwnsEnhancer.enhance(document);
@ -18,3 +20,23 @@ if (window.location.href.includes("profile/trade_finder.php")) {
if (window.location.href.includes("profile/trade_finder_theirs.php")) { if (window.location.href.includes("profile/trade_finder_theirs.php")) {
TradeFinderTheirsEnhancer.enhance(document); TradeFinderTheirsEnhancer.enhance(document);
} }
let refreshLinks = [
"a[href*='/add-to-collection.php']",
"a[href*='/remove-from-collection.php']",
"a[href*='/add-to-wants.php']",
"a[href*='/remove-from-wants.php']",
];
refreshLinks.forEach((link) => {
document.querySelectorAll(link).forEach((link) => {
link.addEventListener("click", async () => {
setTimeout(() => {
TraderRepository.refreshGlobalTradersStorage();
console.log("refreshing");
}, 1000);
});
});
});
TraderRepository.refreshIfNecessary();

View File

@ -35,9 +35,13 @@ export default class TradeFinderRow {
} }
get open(): boolean { get open(): boolean {
return this.cells[0] let badge = this.cells[0].querySelector("span");
.querySelector("span")!
.innerText.includes("Open to trades"); if (!badge) {
return false;
}
return badge.innerText.includes("Open to trades");
} }
get count(): number { get count(): number {

View File

@ -52,7 +52,7 @@ export default class WhoOwnsEnhancer {
Settings.set("hideNonOpenRows", true); Settings.set("hideNonOpenRows", true);
links links
.filter((link) => link!.trader!.open === false) .filter((link) => !link.trader || link!.trader!.open === false)
.forEach((link) => link!.hide()); .forEach((link) => link!.hide());
} }

View File

@ -9,8 +9,6 @@ export default class WhoWantsEnhancer {
let b = Array.from(bs).find((b) => b.innerText.trim() === "WANTERS:")!; let b = Array.from(bs).find((b) => b.innerText.trim() === "WANTERS:")!;
console.log(bs);
let toggle = Toggle.create(); let toggle = Toggle.create();
toggle.element.style.marginBottom = "1.5em"; toggle.element.style.marginBottom = "1.5em";

View File

@ -1,5 +1,6 @@
import { browser } from "webextension-polyfill-ts"; import { browser } from "webextension-polyfill-ts";
import Trader from "./trader"; import Trader from "./trader";
import Settings from "./settings";
export default class TraderRepository { export default class TraderRepository {
page: Document; page: Document;
@ -19,6 +20,18 @@ export default class TraderRepository {
return new TraderRepository(traders!); return new TraderRepository(traders!);
} }
/**
* Refreshes the global storage if necessary.
*/
static async refreshIfNecessary() {
if (
!(await this.hasTradersInStorage()) ||
(await this.shouldBeRefreshed())
) {
await this.refreshGlobalTradersStorage();
}
}
/** /**
* Fetches the traders who want my items from the Encora website. * Fetches the traders who want my items from the Encora website.
*/ */
@ -60,6 +73,8 @@ export default class TraderRepository {
* from the Encora website and stores them in the global storage. * from the Encora website and stores them in the global storage.
*/ */
static async refreshGlobalTradersStorage() { static async refreshGlobalTradersStorage() {
await Settings.set("refresh", false);
let [wantsTraders, ownsTraders] = await Promise.all([ let [wantsTraders, ownsTraders] = await Promise.all([
this.fetchTradersWhoWantMyItems(), this.fetchTradersWhoWantMyItems(),
this.fetchTradersWhoOwnMyWants(), this.fetchTradersWhoOwnMyWants(),
@ -69,7 +84,12 @@ export default class TraderRepository {
(trader) => trader.toJSON() (trader) => trader.toJSON()
); );
if (traders.length === 0) {
return;
}
browser.storage.local.set({ traders: traders }); browser.storage.local.set({ traders: traders });
await Settings.set("lastUpdated", new Date().toString());
} }
/** /**
@ -81,6 +101,27 @@ export default class TraderRepository {
return storage.traders != null; return storage.traders != null;
} }
/**
* Checks if the global storage should be refreshed.
*/
static async shouldBeRefreshed(): Promise<boolean> {
let lastUpdated = await Settings.get("lastUpdated");
if (lastUpdated == null) {
return true;
}
let now = new Date();
let lastUpdatedDate = new Date(lastUpdated);
// Refresh if the last update was more than 5 minutes ago.
if (now.getTime() - lastUpdatedDate.getTime() > 1000 * 60 * 5) {
return true;
}
return false;
}
/** /**
* Loads the traders from the global storage. * Loads the traders from the global storage.
*/ */

View File

@ -1,7 +1,7 @@
{ {
"manifest_version": "0.1.0", "manifest_version": 2,
"name": "Encora Tools", "name": "Encora Tools",
"version": "0.0.1", "version": "0.1.0",
"icons": { "icons": {
"48": "assets/icons/tools-48.png", "48": "assets/icons/tools-48.png",