add: system Notification
This commit is contained in:
parent
329e6dab88
commit
25befec9c6
@ -1,6 +1,7 @@
|
||||
import { BasicExampleFactory, UIExampleFactory } from "./modules/examples";
|
||||
import {
|
||||
changeProgressWindowLine,
|
||||
isProgressWindow,
|
||||
showProgressWindow,
|
||||
} from "./modules/progressWindow";
|
||||
import { config } from "../package.json";
|
||||
@ -14,7 +15,9 @@ async function onStartup() {
|
||||
config.addonName,
|
||||
getString("startup.begin"),
|
||||
"default",
|
||||
-1
|
||||
{
|
||||
closeTime: -1,
|
||||
}
|
||||
);
|
||||
changeProgressWindowLine(progWin, { newProgress: 0 });
|
||||
|
||||
@ -51,7 +54,9 @@ async function onStartup() {
|
||||
newProgress: 100,
|
||||
newText: `[100%] ${getString("startup.finish")}`,
|
||||
});
|
||||
progWin.startCloseTimer(5000);
|
||||
if (isProgressWindow(progWin)) {
|
||||
(progWin as _ZoteroProgressWindow).startCloseTimer(5000);
|
||||
}
|
||||
}
|
||||
|
||||
function onShutdown(): void {
|
||||
|
@ -10,10 +10,34 @@ export function showProgressWindow(
|
||||
header: string,
|
||||
context: string,
|
||||
type: "success" | "fail" | "default" = "default",
|
||||
t: number = 5000
|
||||
): _ZoteroProgressWindow {
|
||||
options: {
|
||||
closeTime?: number;
|
||||
backend?: "Zotero" | "system";
|
||||
} = {
|
||||
closeTime: 5000,
|
||||
backend: "Zotero",
|
||||
}
|
||||
): _ZoteroProgressWindow | Notification {
|
||||
// Currently Zotero 7 doesn't support progress window.
|
||||
// Use system backend on Zotero 7.
|
||||
if (options.backend === "system" || ztoolkit.Compat.isZotero7()) {
|
||||
Zotero.Prefs.set("alerts.useSystemBackend", true, true);
|
||||
const notification = new (ztoolkit.Compat.getGlobal(
|
||||
"Notification"
|
||||
) as typeof Notification)(header, {
|
||||
body: context,
|
||||
icon: progressWindowIcon[type],
|
||||
tag: config.addonName,
|
||||
});
|
||||
if (options.closeTime) {
|
||||
(ztoolkit.Compat.getGlobal("setTimeout") as typeof setTimeout)(() => {
|
||||
notification.close();
|
||||
}, options.closeTime);
|
||||
}
|
||||
return notification;
|
||||
} else {
|
||||
// A simple wrapper of the Zotero ProgressWindow
|
||||
let progressWindow = new Zotero.ProgressWindow({
|
||||
const progressWindow = new Zotero.ProgressWindow({
|
||||
closeOnClick: true,
|
||||
}) as _ZoteroProgressWindow;
|
||||
progressWindow.changeHeadline(header);
|
||||
@ -23,20 +47,24 @@ export function showProgressWindow(
|
||||
context
|
||||
);
|
||||
progressWindow.show();
|
||||
if (t > 0) {
|
||||
progressWindow.startCloseTimer(t);
|
||||
if (options.closeTime) {
|
||||
progressWindow.startCloseTimer(options.closeTime);
|
||||
}
|
||||
return progressWindow;
|
||||
}
|
||||
}
|
||||
|
||||
export function changeProgressWindowLine(
|
||||
progressWindow: _ZoteroProgressWindow,
|
||||
progressWindow: _ZoteroProgressWindow | Notification,
|
||||
options: {
|
||||
newText?: string;
|
||||
newIcon?: string;
|
||||
newProgress?: number;
|
||||
}
|
||||
) {
|
||||
if (!isProgressWindow(progressWindow)) {
|
||||
return;
|
||||
}
|
||||
// @ts-ignore
|
||||
const progress = progressWindow.progress as _ZoteroItemProgress;
|
||||
if (!progress) {
|
||||
@ -46,3 +74,9 @@ export function changeProgressWindowLine(
|
||||
options.newIcon && progress.setIcon(options.newIcon);
|
||||
options.newProgress && progress.setProgress(options.newProgress);
|
||||
}
|
||||
|
||||
export function isProgressWindow(
|
||||
progressWindow: _ZoteroProgressWindow | Notification
|
||||
) {
|
||||
return !(progressWindow as Notification).title;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user