68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import dbus from "@homebridge/dbus-native";
|
|
|
|
import { NativeImage, app, nativeImage } from "electron";
|
|
|
|
import { mainWindow } from "./window";
|
|
|
|
// internal state
|
|
const nativeIcons: Record<number, NativeImage> = {};
|
|
let sessionBus: dbus.MessageBus | null;
|
|
|
|
export async function setBadgeCount(count: number) {
|
|
switch (process.platform) {
|
|
case "win32":
|
|
case "linux":
|
|
if (count === 0) {
|
|
mainWindow.setOverlayIcon(null, "No Notifications");
|
|
break;
|
|
}
|
|
|
|
if (!nativeIcons[count])
|
|
nativeIcons[count] = nativeImage.createFromDataURL(
|
|
await import(
|
|
`../../assets/desktop/badges/${Math.min(count, 10)}.ico?asset`
|
|
),
|
|
);
|
|
|
|
mainWindow.setOverlayIcon(
|
|
nativeIcons[count],
|
|
count === -1 ? `Unread Messages` : `${count} Notifications`,
|
|
);
|
|
|
|
break;
|
|
// @ts-expect-error this is `linux` block
|
|
case "_": // todo: try to get this to work
|
|
// send D-Bus message
|
|
// @ts-expect-error undocumented API
|
|
if (!sessionBus) sessionBus = dbus.sessionBus();
|
|
|
|
// @ts-expect-error undocumented API
|
|
sessionBus.connection.message({
|
|
// @ts-expect-error undocumented API
|
|
type: dbus.messageType.signal,
|
|
serial: 1,
|
|
path: "/",
|
|
interface: "com.canonical.Unity.LauncherEntry",
|
|
member: "Update",
|
|
signature: "sa{sv}",
|
|
body: [
|
|
process.env.container === "1"
|
|
? "application://chat.stoat.stoat-desktop.desktop" // flatpak handling
|
|
: "application://stoat-desktop.desktop",
|
|
[
|
|
["count", ["x", Math.min(count, 0)]],
|
|
["count-visible", ["b", count !== 0]],
|
|
],
|
|
],
|
|
});
|
|
|
|
break;
|
|
case "darwin":
|
|
app.dock.setBadge(
|
|
count === -1 ? "•" : count === 0 ? "" : count.toString(),
|
|
);
|
|
|
|
break;
|
|
}
|
|
}
|