Open
Description
-
You need to create a shortcut to your app in the start menu, and it needs to include the following:
-
appUserModelId
Application User Model ID -
toastActivatorClsid
Value 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
Metadata
Metadata
Assignees
Labels
No labels