Initial round of re-branding, I temporarily am using the dta icon just rotated 180, waiting for a permanent icon to use Removed the initial create tab for dta but left any download links as is Added webextension-polyfill-ts to enable retrieval of cookies Removed all access and preferences to the download manager as it is not relevant in this fork
79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
"use strict";
|
|
// License: MIT
|
|
|
|
import { extension, notifications } from "./browser";
|
|
|
|
import {EventEmitter} from "./events";
|
|
|
|
const DEFAULTS = {
|
|
type: "basic",
|
|
iconUrl: extension.getURL("/style/icon64.png"),
|
|
title: "TraitorousDownloading!",
|
|
message: "message",
|
|
};
|
|
|
|
const TIMEOUT = 4000;
|
|
|
|
let gid = 1;
|
|
|
|
export class Notification extends EventEmitter {
|
|
private notification: any;
|
|
|
|
private readonly generated: boolean;
|
|
|
|
constructor(id: string | null, options = {}) {
|
|
super();
|
|
|
|
this.generated = !id;
|
|
id = id || `TraitorousDownloading-notification${++gid}`;
|
|
if (typeof options === "string") {
|
|
options = {message: options};
|
|
}
|
|
options = Object.assign(Object.assign({}, DEFAULTS), options);
|
|
|
|
this.opened = this.opened.bind(this);
|
|
this.closed = this.closed.bind(this);
|
|
this.clicked = this.clicked.bind(this);
|
|
|
|
this.notification = notifications.create(id, options);
|
|
|
|
this.notification.then(this.opened).catch(console.error);
|
|
notifications.onClosed.addListener(this.closed);
|
|
notifications.onClicked.addListener(this.clicked);
|
|
notifications.onButtonClicked.addListener(this.clicked);
|
|
}
|
|
|
|
opened(notification: any) {
|
|
this.notification = notification;
|
|
this.emit("opened", this);
|
|
if (this.generated) {
|
|
setTimeout(() => {
|
|
notifications.clear(notification);
|
|
}, TIMEOUT);
|
|
}
|
|
}
|
|
|
|
clicked(notification: any, button?: number) {
|
|
// We can only be clicked, when we were opened, at which point the
|
|
// notification id is available
|
|
if (notification !== this.notification) {
|
|
return;
|
|
}
|
|
if (typeof button === "number") {
|
|
this.emit("button", this, button);
|
|
return;
|
|
}
|
|
this.emit("clicked", this);
|
|
console.log("clicked", notification);
|
|
}
|
|
|
|
async closed(notification: any) {
|
|
if (notification !== await this.notification) {
|
|
return;
|
|
}
|
|
notifications.onClosed.removeListener(this.closed);
|
|
notifications.onClicked.removeListener(this.clicked);
|
|
this.emit("closed", this);
|
|
}
|
|
}
|