diff --git a/index.js b/index.js index 07801d58..8360f147 100644 --- a/index.js +++ b/index.js @@ -127,9 +127,27 @@ function createMainWindow() { autoHideMenuBar: config.get("options.hideMenu"), }); remote.enable(win.webContents); + if (windowPosition) { const { x, y } = windowPosition; - win.setPosition(x, y); + const winSize = win.getSize(); + const displaySize = + electron.screen.getDisplayNearestPoint(windowPosition).bounds; + if ( + x + winSize[0] < displaySize.x - 8 || + x - winSize[0] > displaySize.x + displaySize.width || + y < displaySize.y - 8 || + y > displaySize.y + displaySize.height + ) { + //Window is offscreen + if (is.dev()) { + console.log( + `Window tried to render offscreen, windowSize=${winSize}, displaySize=${displaySize}, position=${windowPosition}` + ); + } + } else { + win.setPosition(x, y); + } } if (windowMaximized) { win.maximize(); diff --git a/package.json b/package.json index 6b25969e..67a85942 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,15 @@ "productName": "YouTube Music", "mac": { "identity": null, + "target": [ + { + "target": "dmg", + "arch": [ + "x64", + "arm64" + ] + } + ], "icon": "assets/generated/icons/mac/icon.icns" }, "win": { @@ -58,7 +67,8 @@ "clean": "rimraf dist", "build": "yarn run clean && electron-builder --win --mac --linux", "build:linux": "yarn run clean && electron-builder --linux", - "build:mac": "yarn run clean && electron-builder --mac", + "build:mac": "yarn run clean && electron-builder --mac dmg:x64", + "build:mac:arm64": "yarn run clean && electron-builder --mac dmg:arm64", "build:win": "yarn run clean && electron-builder --win", "lint": "xo", "plugins": "yarn run plugin:adblocker", diff --git a/plugins/downloader/menu.js b/plugins/downloader/menu.js index 2f2df421..94d12488 100644 --- a/plugins/downloader/menu.js +++ b/plugins/downloader/menu.js @@ -5,6 +5,7 @@ const { dialog, ipcMain } = require("electron"); const is = require("electron-is"); const ytpl = require("ytpl"); const chokidar = require('chokidar'); +const filenamify = require('filenamify'); const { setOptions } = require("../../config/plugins"); const { sendError } = require("./back"); @@ -94,10 +95,10 @@ async function downloadPlaylist(givenUrl, win, options) { sendError(win, e); return; } - const playlistTitle = playlist.title; + const safePlaylistTitle = filenamify(playlist.title, {replacement: ' '}); const folder = getFolder(options.downloadFolder); - const playlistFolder = join(folder, playlistTitle); + const playlistFolder = join(folder, safePlaylistTitle); if (existsSync(playlistFolder)) { sendError( win, @@ -111,13 +112,13 @@ async function downloadPlaylist(givenUrl, win, options) { type: "info", buttons: ["OK"], title: "Started Download", - message: `Downloading Playlist "${playlistTitle}"`, + message: `Downloading Playlist "${playlist.title}"`, detail: `(${playlist.items.length} songs)`, }); if (is.dev()) { console.log( - `Downloading playlist "${playlistTitle}" - ${playlist.items.length} songs (${playlistId})` + `Downloading playlist "${playlist.title}" - ${playlist.items.length} songs (${playlistId})` ); } @@ -143,7 +144,7 @@ async function downloadPlaylist(givenUrl, win, options) { win.webContents.send( "downloader-download-playlist", song.url, - playlistTitle, + safePlaylistTitle, options ); });