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",
"version": "0.1.0",
"version": "0.1",
"description": "Adds extra features to the Encora trading site.",
"private": true,
"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 => {
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 WhoOwnsEnhancer from "./page-enhancers/who-owns-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")) {
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")) {
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 {
return this.cells[0]
.querySelector("span")!
.innerText.includes("Open to trades");
let badge = this.cells[0].querySelector("span");
if (!badge) {
return false;
}
return badge.innerText.includes("Open to trades");
}
get count(): number {

View File

@ -52,7 +52,7 @@ export default class WhoOwnsEnhancer {
Settings.set("hideNonOpenRows", true);
links
.filter((link) => link!.trader!.open === false)
.filter((link) => !link.trader || link!.trader!.open === false)
.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:")!;
console.log(bs);
let toggle = Toggle.create();
toggle.element.style.marginBottom = "1.5em";

View File

@ -1,5 +1,6 @@
import { browser } from "webextension-polyfill-ts";
import Trader from "./trader";
import Settings from "./settings";
export default class TraderRepository {
page: Document;
@ -19,6 +20,18 @@ export default class TraderRepository {
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.
*/
@ -60,6 +73,8 @@ export default class TraderRepository {
* from the Encora website and stores them in the global storage.
*/
static async refreshGlobalTradersStorage() {
await Settings.set("refresh", false);
let [wantsTraders, ownsTraders] = await Promise.all([
this.fetchTradersWhoWantMyItems(),
this.fetchTradersWhoOwnMyWants(),
@ -69,7 +84,12 @@ export default class TraderRepository {
(trader) => trader.toJSON()
);
if (traders.length === 0) {
return;
}
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;
}
/**
* 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.
*/

View File

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