mirror of
https://github.com/abhijithvijayan/web-extension-starter.git
synced 2025-10-07 07:22:37 +02:00
Improve refresh logic and fix bugs
This commit is contained in:
parent
cfc97a0be5
commit
476538e994
@ -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",
|
||||
|
||||
@ -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();
|
||||
});
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
@ -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.
|
||||
*/
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user