Skip to content

[Guide] How to use SnoreToast with both appID and actions #424

Open
@Araxeus

Description

@Araxeus

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions