diff --git a/index.js b/index.js index 0c32a9f9..9942ad1b 100644 --- a/index.js +++ b/index.js @@ -12,6 +12,7 @@ const { isAppVisible, isTrayEnabled, store, + startAtLogin, } = require("./store"); const { fileExists, injectCSS } = require("./plugins/utils"); const { isTesting } = require("./utils/testing"); @@ -170,6 +171,11 @@ app.on("ready", () => { mainWindow = createMainWindow(); setUpTray(app, mainWindow); + // Autostart at login + app.setLoginItemSettings({ + openAtLogin: startAtLogin(), + }); + if (!is.dev() && autoUpdate()) { autoUpdater.checkForUpdatesAndNotify(); autoUpdater.on("update-available", () => { diff --git a/menu.js b/menu.js index 6f9e6836..e18b9bd0 100644 --- a/menu.js +++ b/menu.js @@ -1,4 +1,5 @@ const { app, Menu } = require("electron"); +const is = require("electron-is"); const { getAllPlugins } = require("./plugins/utils"); const { @@ -9,6 +10,7 @@ const { isAppVisible, isTrayEnabled, setOptions, + startAtLogin, } = require("./store"); const mainMenuTemplate = [ @@ -40,6 +42,20 @@ const mainMenuTemplate = [ setOptions({ autoUpdates: item.checked }); }, }, + ...(is.windows() || is.macOS() + ? // Only works on Win/Mac + // https://www.electronjs.org/docs/api/app#appsetloginitemsettingssettings-macos-windows + [ + { + label: "Start at login", + type: "checkbox", + checked: startAtLogin(), + click: (item) => { + setOptions({ startAtLogin: item.checked }); + }, + }, + ] + : []), { label: "Tray", submenu: [ diff --git a/store/index.js b/store/index.js index 4ae9af01..703b4d83 100644 --- a/store/index.js +++ b/store/index.js @@ -5,16 +5,17 @@ const store = new Store({ defaults: { "window-size": { width: 1100, - height: 550 + height: 550, }, url: "https://music.youtube.com", plugins: ["navigation", "shortcuts", "adblocker"], options: { tray: false, appVisible: true, - autoUpdates: true - } - } + autoUpdates: true, + startAtLogin: false, + }, + }, }); module.exports = { @@ -29,5 +30,6 @@ module.exports = { store.set("options", { ...store.get("options"), ...options }), isTrayEnabled: () => store.get("options.tray"), isAppVisible: () => store.get("options.appVisible"), - autoUpdate: () => store.get("options.autoUpdates") + autoUpdate: () => store.get("options.autoUpdates"), + startAtLogin: () => store.get("options.startAtLogin"), };