Skip to content

Commit

Permalink
fixed web worker intercepting each other's messages
Browse files Browse the repository at this point in the history
  • Loading branch information
cbartondock committed Jun 12, 2024
1 parent 00a052d commit 16f315d
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 14 deletions.
1 change: 0 additions & 1 deletion src/lib/image-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ export class ImageProvider {
stopUrlDownload() {
for (let key in this.availableProviders) {
let provider = this.availableProviders[key];

provider.queue = this.createQueue(key);
this.postMessage(provider.worker, 'stopDownloads', null);
}
Expand Down
2 changes: 2 additions & 0 deletions src/lib/image-providers/api-key.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// TODO make the user input this
export const apiKey = "f80f92019254471cca9d62ff91c21eee";
9 changes: 4 additions & 5 deletions src/lib/image-providers/generic-provider.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
// All in worker process
// All in worker process(es)

import '../replace-diacritics';

import { FuzzyMatcher } from "../fuzzy-matcher";
import { FuzzyEventMap, ProviderPostEventMap, ProviderPostObject, ProviderReceiveEventMap, ImageContent, ImageProviderAPI, OnlineProviderType, ImageProviderName } from "../../models";

//declare var self: Worker;
declare var self: DedicatedWorkerGlobalScope;

export abstract class GenericProvider {
constructor(protected proxy: ProviderProxy<GenericProvider>) { }
Expand Down Expand Up @@ -66,8 +65,8 @@ export class GenericProviderManager<T extends GenericProvider> {

// How worker handles receiving a message from main process
private onMessage(event: MessageEvent) {
//self.name == this.providerName fixes issue where workers were intercepting each other's messages... no idea why.
if (event.data && event.data.event && self.name==this.providerName) {
//add back self.name == this.providerName to if statement if workers are intercepting each other's messages
if (event.data && event.data.event) {
switch ((event.data.event as keyof ProviderReceiveEventMap)) {
case 'fuzzyList':
this._fuzzyMatcher.setFuzzyList((event.data.data as ProviderReceiveEventMap['fuzzyList']).list || null);
Expand Down
2 changes: 1 addition & 1 deletion src/lib/image-providers/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const imageProviders = {
'steamCDN': new Worker(new URL('./steamcdn.worker', import.meta.url), {name: 'steamCDN'}),
'sgdb': new Worker(new URL('./steamgriddb.worker', import.meta.url), {name: 'sgdb'}),
'steamCDN': new Worker(new URL('./steamcdn.worker', import.meta.url), {name: 'steamCDN'})
}
5 changes: 3 additions & 2 deletions src/lib/image-providers/steamcdn.worker.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { GenericProvider, GenericProviderManager, ProviderProxy } from "./generic-provider";
import {apiKey} from "./steamgriddb.worker";
import {apiKey} from "./api-key";
import { xRequestWrapper } from "./x-request-wrapper";
import SGDB from "steamgriddb";
import { artworkTypes, steamArtworkDict } from '../artwork-types'
import { imageProviderNames, sgdbIdRegex } from "./available-providers";

//NOTE: Workers must not import from one another.

export class SteamCDNProvider extends GenericProvider {
private xrw: xRequestWrapper<SteamCDNProvider>;
private client: any;
Expand All @@ -16,7 +18,6 @@ export class SteamCDNProvider extends GenericProvider {
}
retrieveUrls() {
let self = this;
let imageGameId: string;
this.xrw.promise = new Promise<void>((resolve) => {
let idPromise: Promise<number> = null;
if(sgdbIdRegex.test(self.proxy.title)) {
Expand Down
6 changes: 2 additions & 4 deletions src/lib/image-providers/steamgriddb.worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ import { GenericProvider, GenericProviderManager, ProviderProxy } from "./generi
import { xRequestWrapper } from "./x-request-wrapper";
import SGDB from "steamgriddb";
import { imageProviderNames, sgdbIdRegex } from "./available-providers";
import {apiKey} from "./api-key";



// TODO make the user input this
export const apiKey = "f80f92019254471cca9d62ff91c21eee";
//NOTE: Workers must not import from one another.

export class SteamGridDbProvider extends GenericProvider {
private xrw: xRequestWrapper<SteamGridDbProvider>;
Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"compilerOptions": {
"target": "es2022",
"lib": ["es2022"],
"lib": ["es2022", "webworker"],
"module": "ESNext",
"sourceMap": true,
"emitDecoratorMetadata": true,
Expand Down

0 comments on commit 16f315d

Please sign in to comment.