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