Extractor.watch()
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { Request, Actions } from "../common";
|
||||
import { getTabByID } from "./actions";
|
||||
import { caches, logger } from "./common";
|
||||
import { logger } from "./common";
|
||||
|
||||
/**
|
||||
* Sending a message to target tab repeatedly until the response is not undefined.
|
||||
@ -78,14 +78,41 @@ export function sendMessage<T>(
|
||||
});
|
||||
}
|
||||
|
||||
chrome.runtime.onMessage.addListener(function (request: Request, sender, sendResponse) {
|
||||
switch (request.action) {
|
||||
case Actions.UPLOAD_STATE:
|
||||
sendResponse('recieved!');
|
||||
caches.setState(request.fileName, request.state)
|
||||
break;
|
||||
default:
|
||||
sendResponse("Request not supported.");
|
||||
break;
|
||||
export type ActionSubscriber = (request: Request, sender: chrome.runtime.MessageSender, sendResponse: (response?: any) => void) => void | Promise<void>;
|
||||
class MessageSubscribers {
|
||||
private listeners: { [key: number]: ActionSubscriber[] } = {};
|
||||
addListener(action: Actions, subscriber: ActionSubscriber) {
|
||||
this.listeners[action] || (this.listeners[action] = []);
|
||||
this.listeners[action].push(subscriber);
|
||||
}
|
||||
removeListener(action: Actions, subscriber: ActionSubscriber) {
|
||||
this.listeners[action] || (this.listeners[action] = []);
|
||||
for (let i = 0; i < this.listeners[action].length; i++) {
|
||||
if (this.listeners[action][i] == subscriber) {
|
||||
this.listeners[action].splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
logger.debug(`${this.listeners[action].length} subscriber(s) remained for action ${Actions[action]}`);
|
||||
}
|
||||
getListeners(action: Actions): ActionSubscriber[] {
|
||||
return this.listeners[action]
|
||||
}
|
||||
}
|
||||
export const messageSubscribers = new MessageSubscribers();
|
||||
|
||||
chrome.runtime.onMessage.addListener(function (request: Request, sender, sendResponse) {
|
||||
let subscribers = messageSubscribers.getListeners(request.action);
|
||||
if (!subscribers || !subscribers.length) {
|
||||
sendResponse("Request not supported.");
|
||||
return;
|
||||
}
|
||||
let promises: Promise<any>[] = [];
|
||||
for (let subscriber of subscribers) {
|
||||
let p = subscriber(request, sender, sendResponse);
|
||||
if (p instanceof Promise) promises.push(p);
|
||||
}
|
||||
if (promises.length)
|
||||
return Promise.all(promises);
|
||||
return;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user