node-notifier
node-notifier copied to clipboard
[Guide] How to use SnoreToast with both appID and actions
-
You need to create a shortcut to your app in the start menu, and it needs to include the following:
-
appUserModelIdApplication User Model ID -
toastActivatorClsidValue depends on the SnoreToast version! https://github.com/KDE/snoretoast/blob/v0.9.0/CMakeLists.txt#L5 https://github.com/KDE/snoretoast/blob/v0.7.0/CMakeLists.txt#L5
-
-
You need to do
app.setAppUserModelId(appID)
Here is an example from youtube-music :
if (is.windows()) {
// Depends on SnoreToast version https://github.com/KDE/snoretoast/blob/master/CMakeLists.txt#L5
const toastActivatorClsid = "eb1fdd5b-8f70-4b5a-b230-998a2dc19303"; // v0.7.0
const appID = "com.github.th-ch.youtube-music";
app.setAppUserModelId(appID);
const appLocation = process.execPath;
const appData = app.getPath("appData");
// continue if not in dev mode / running portable app
if (!is.dev() && !appLocation.startsWith(path.join(appData, "..", "Local", "Temp"))) {
// shortcutPath can be anywhere inside AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
const shortcutPath = path.join(appData, "Microsoft", "Windows", "Start Menu", "Programs", "YouTube Music.lnk");
// check if shortcut doesn't exist -> create it, if it exist and invalid -> update it
try {
const shortcutDetails = electron.shell.readShortcutLink(shortcutPath); // throws error if it doesn't exist yet
// validate shortcutDetails
if (
shortcutDetails.target !== appLocation ||
shortcutDetails.appUserModelId !== appID ||
shortcutDetails.toastActivatorClsid !== toastActivatorClsid
) {
throw "needUpdate";
}
// if the execution got to this line, the shortcut exists and is valid
} catch (error) { // if not valid -> Register shortcut
electron.shell.writeShortcutLink(
shortcutPath,
error === "needUpdate" ? "update" : "create",
{
target: appLocation,
cwd: path.dirname(appLocation),
description: "YouTube Music Desktop App - including custom plugins",
appUserModelId: appID,
toastActivatorClsid
}
);
}
}
}
this method currently requires Electron but you could get packages from npm / make similar functions yourself
@mikaelbr
- There should be some official way to know the version of SnoreToast in /vendors,
- Maybe this post or the gist of it should be mentioned in the Readme
Thanks for the guide 🙌 ! Added link to this post here 027f0d6c837542459357d59bcc8aee1bf447a9fb. If you have any suggestion how to have an official way to know the version, I'm happy to hear it!