diff --git a/electron/commands/custom-models-select.ts b/electron/commands/custom-models-select.ts index fa6937a..867edb5 100644 --- a/electron/commands/custom-models-select.ts +++ b/electron/commands/custom-models-select.ts @@ -1,20 +1,22 @@ import { MessageBoxOptions, dialog } from "electron"; -import mainWindow from "../main-window"; import { - getCustomModelsFolderPath, + customModelsFolderPath, setCustomModelsFolderPath, } from "../utils/config-variables"; import logit from "../utils/logit"; import slash from "../utils/slash"; import COMMAND from "../constants/commands"; import getModels from "../utils/get-models"; +import { getMainWindow } from "../main-window"; + +const mainWindow = getMainWindow(); const customModelsSelect = async (event, message) => { if (!mainWindow) return; const { canceled, filePaths: folderPaths } = await dialog.showOpenDialog({ properties: ["openDirectory"], title: "Select Custom Models Folder", - defaultPath: getCustomModelsFolderPath(), + defaultPath: customModelsFolderPath, }); if (canceled) { logit("🚫 Select Custom Models Folder Operation Cancelled"); @@ -40,11 +42,11 @@ const customModelsSelect = async (event, message) => { mainWindow.webContents.send( COMMAND.CUSTOM_MODEL_FILES_LIST, - getModels(getCustomModelsFolderPath()) + getModels(customModelsFolderPath) ); - logit("📁 Custom Folder Path: ", getCustomModelsFolderPath()); - return getCustomModelsFolderPath(); + logit("📁 Custom Folder Path: ", customModelsFolderPath); + return customModelsFolderPath; } }; diff --git a/electron/commands/get-models-list.ts b/electron/commands/get-models-list.ts index b27cf12..e754ea9 100644 --- a/electron/commands/get-models-list.ts +++ b/electron/commands/get-models-list.ts @@ -1,18 +1,20 @@ import COMMAND from "../constants/commands"; -import mainWindow from "../main-window"; +import { getMainWindow } from "../main-window"; import { - getCustomModelsFolderPath, + customModelsFolderPath, setCustomModelsFolderPath, } from "../utils/config-variables"; import getModels from "../utils/get-models"; import logit from "../utils/logit"; +const mainWindow = getMainWindow(); + const getModelsList = async (event, payload) => { if (!mainWindow) return; if (payload) { setCustomModelsFolderPath(payload); - logit("📁 Custom Models Folder Path: ", getCustomModelsFolderPath()); + logit("📁 Custom Models Folder Path: ", customModelsFolderPath); mainWindow.webContents.send( COMMAND.CUSTOM_MODEL_FILES_LIST, diff --git a/electron/commands/image-upscayl.ts b/electron/commands/image-upscayl.ts index f0eb5f4..1b8b85d 100644 --- a/electron/commands/image-upscayl.ts +++ b/electron/commands/image-upscayl.ts @@ -1,17 +1,16 @@ import fs from "fs"; import { modelsPath } from "../binaries"; import COMMAND from "../constants/commands"; -import mainWindow from "../main-window"; import { - getCustomModelsFolderPath, - getFolderPath, - getOutputFolderPath, - getOverwrite, - getSaveOutputFolder, - getStop, + customModelsFolderPath, + folderPath, + outputFolderPath, + overwrite, + saveOutputFolder, setChildProcesses, setOverwrite, - setStop, + setStopped, + stopped, } from "../utils/config-variables"; import convertAndScale from "../utils/convert-and-scale"; import { getSingleImageArguments } from "../utils/get-arguments"; @@ -20,9 +19,20 @@ import slash from "../utils/slash"; import { spawnUpscayl } from "../utils/spawn-upscayl"; import { parse } from "path"; import DEFAULT_MODELS from "../constants/models"; +import { getMainWindow } from "../main-window"; +import stop from "./stop"; const imageUpscayl = async (event, payload) => { - if (!mainWindow) return; + const mainWindow = getMainWindow(); + + if (!mainWindow) { + console.log("No main window"); + return; + } + console.log({ + overwrite: payload.overwrite, + }); + setOverwrite(payload.overwrite); const model = payload.model as string; const gpuId = payload.gpuId as string; @@ -30,10 +40,10 @@ const imageUpscayl = async (event, payload) => { let inputDir = (payload.imagePath.match(/(.*)[\/\\]/)[1] || "") as string; let outputDir: string | undefined = - getFolderPath() || (payload.outputPath as string); + folderPath || (payload.outputPath as string); - if (getSaveOutputFolder() === true && getOutputFolderPath()) { - outputDir = getOutputFolderPath(); + if (saveOutputFolder === true && outputFolderPath) { + outputDir = outputFolderPath; } const isDefaultModel = DEFAULT_MODELS.includes(model); @@ -63,6 +73,7 @@ const imageUpscayl = async (event, payload) => { saveImageAs; // GET OVERWRITE SETTINGS FROM LOCAL STORAGE + mainWindow.webContents .executeJavaScript('localStorage.getItem("overwrite");', true) .then((lastSavedOverwrite: boolean | null) => { @@ -73,7 +84,7 @@ const imageUpscayl = async (event, payload) => { }); // UPSCALE - if (fs.existsSync(outFile) && getOverwrite() === false) { + if (fs.existsSync(outFile) && overwrite === false) { // If already upscayled, just output that file logit("✅ Already upscayled at: ", outFile); mainWindow.webContents.send( @@ -90,7 +101,7 @@ const imageUpscayl = async (event, payload) => { inputDir, fullfileName, outFile, - isDefaultModel ? modelsPath : getCustomModelsFolderPath() ?? modelsPath, + isDefaultModel ? modelsPath : customModelsFolderPath ?? modelsPath, model, scale, gpuId, @@ -101,12 +112,11 @@ const imageUpscayl = async (event, payload) => { setChildProcesses(upscayl); - setStop(false); + setStopped(false); let isAlpha = false; let failed = false; const onData = (data: string) => { - if (!mainWindow) return; logit("image upscayl: ", data.toString()); mainWindow.setProgressBar(parseFloat(data.slice(0, data.length)) / 100); data = data.toString(); @@ -130,15 +140,13 @@ const imageUpscayl = async (event, payload) => { return; }; const onClose = async () => { - if (!failed && !getStop()) { + if (!failed && !stopped) { logit("💯 Done upscaling"); logit("♻ Scaling and converting now..."); - mainWindow && - mainWindow.webContents.send(COMMAND.SCALING_AND_CONVERTING); + mainWindow.webContents.send(COMMAND.SCALING_AND_CONVERTING); // Free up memory upscayl.kill(); try { - if (!mainWindow) return; await convertAndScale( inputDir + slash + fullfileName, isAlpha ? outFile + ".png" : outFile, @@ -161,11 +169,10 @@ const imageUpscayl = async (event, payload) => { error ); upscayl.kill(); - mainWindow && - mainWindow.webContents.send( - COMMAND.UPSCAYL_ERROR, - "Error processing (scaling and converting) the image. Please report this error on Upscayl GitHub Issues page." - ); + mainWindow.webContents.send( + COMMAND.UPSCAYL_ERROR, + "Error processing (scaling and converting) the image. Please report this error on Upscayl GitHub Issues page." + ); } } }; diff --git a/electron/commands/select-file.ts b/electron/commands/select-file.ts index e8b7130..7ee9679 100644 --- a/electron/commands/select-file.ts +++ b/electron/commands/select-file.ts @@ -1,14 +1,15 @@ import { MessageBoxOptions, dialog } from "electron"; -import mainWindow from "../main-window"; -import { getImagePath, setImagePath } from "../utils/config-variables"; +import { getMainWindow } from "../main-window"; +import { imagePath, setImagePath } from "../utils/config-variables"; import logit from "../utils/logit"; +const mainWindow = getMainWindow(); + const selectFile = async () => { - if (!mainWindow) return; const { canceled, filePaths } = await dialog.showOpenDialog({ properties: ["openFile", "multiSelections"], title: "Select Image", - defaultPath: getImagePath(), + defaultPath: imagePath, }); if (canceled) { @@ -43,6 +44,7 @@ const selectFile = async () => { message: "The selected file is not a valid image. Make sure you select a '.png', '.jpg', or '.webp' file.", }; + if (!mainWindow) return null; dialog.showMessageBoxSync(mainWindow, options); return null; } diff --git a/electron/commands/select-folder.ts b/electron/commands/select-folder.ts index ba0ad37..f92b01a 100644 --- a/electron/commands/select-folder.ts +++ b/electron/commands/select-folder.ts @@ -1,11 +1,11 @@ import { dialog } from "electron"; -import { getFolderPath, setFolderPath } from "../utils/config-variables"; +import { folderPath, setFolderPath } from "../utils/config-variables"; import logit from "../utils/logit"; const selectFolder = async (event, message) => { const { canceled, filePaths: folderPaths } = await dialog.showOpenDialog({ properties: ["openDirectory"], - defaultPath: getFolderPath(), + defaultPath: folderPath, }); if (canceled) { @@ -13,7 +13,7 @@ const selectFolder = async (event, message) => { return null; } else { setFolderPath(folderPaths[0]); - logit("📁 Selected Folder Path: ", getFolderPath()); + logit("📁 Selected Folder Path: ", folderPath); return folderPaths[0]; } }; diff --git a/electron/commands/stop.ts b/electron/commands/stop.ts index d503ef2..164fd6f 100644 --- a/electron/commands/stop.ts +++ b/electron/commands/stop.ts @@ -1,11 +1,13 @@ -import mainWindow from "../main-window"; -import { getChildProcesses, setStop } from "../utils/config-variables"; +import { getMainWindow } from "../main-window"; +import { childProcesses, setStopped } from "../utils/config-variables"; import logit from "../utils/logit"; +const mainWindow = getMainWindow(); + const stop = async (event, payload) => { - setStop(true); + setStopped(true); mainWindow && mainWindow.setProgressBar(-1); - getChildProcesses().forEach((child) => { + childProcesses.forEach((child) => { logit("🛑 Stopping Upscaling Process", child.process.pid); child.kill(); }); diff --git a/electron/index.ts b/electron/index.ts index 5138ec0..7b45a4f 100644 --- a/electron/index.ts +++ b/electron/index.ts @@ -1,6 +1,15 @@ +import prepareNext from "electron-next"; import { autoUpdater } from "electron-updater"; import log from "electron-log"; -import { app, ipcMain, dialog, MessageBoxOptions } from "electron"; +import { + app, + ipcMain, + dialog, + MessageBoxOptions, + shell, + protocol, + net, +} from "electron"; import COMMAND from "./constants/commands"; import logit from "./utils/logit"; import openFolder from "./commands/open-folder"; @@ -10,19 +19,41 @@ import selectFile from "./commands/select-file"; import getModelsList from "./commands/get-models-list"; import customModelsSelect from "./commands/custom-models-select"; import imageUpscayl from "./commands/image-upscayl"; -import { setStop } from "./utils/config-variables"; +import { + setCustomModelsFolderPath, + setFolderPath, + setImagePath, + setOutputFolderPath, + setQuality, + setSaveOutputFolder, + setStopped, +} from "./utils/config-variables"; +import { createMainWindow, getMainWindow } from "./main-window"; +import electronIsDev from "electron-is-dev"; +import { getPlatform } from "./get-device-specs"; +import { join } from "path"; +import { execPath, modelsPath } from "./binaries"; // INITIALIZATION -setStop(false); log.initialize({ preload: true }); +logit("🚃 App Path: ", app.getAppPath()); -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} +app.whenReady().then(async () => { + await prepareNext("./renderer"); + createMainWindow(); + log.info("🚀 UPSCAYL EXEC PATH: ", execPath("realesrgan")); + log.info("🚀 MODELS PATH: ", modelsPath); + protocol.handle("file:", (request) => { + const pathname = decodeURI(request.url); + return net.fetch(pathname); + }); + if (!electronIsDev) { + autoUpdater.checkForUpdates(); + } +}); // Quit the app once all windows are closed app.on("window-all-closed", app.quit); -logit("🚃 App Path: ", app.getAppPath()); //------------------------Open Folder-----------------------------// ipcMain.on(COMMAND.OPEN_FOLDER, openFolder); diff --git a/electron/main-window.ts b/electron/main-window.ts index 73cbe54..ca7d9f8 100644 --- a/electron/main-window.ts +++ b/electron/main-window.ts @@ -1,63 +1,46 @@ -import prepareNext from "electron-next"; -import { BrowserWindow, app, net, protocol, shell } from "electron"; -import COMMAND from "./constants/commands"; +import { BrowserWindow, shell } from "electron"; import { getPlatform } from "./get-device-specs"; import { join } from "path"; -import { execPath, modelsPath } from "./binaries"; -import log from "electron-log"; -import isDev from "electron-is-dev"; -import { autoUpdater } from "electron-updater"; import { setCustomModelsFolderPath, setFolderPath, setImagePath, setOutputFolderPath, + setOverwrite, setQuality, setSaveOutputFolder, } from "./utils/config-variables"; +import COMMAND from "./constants/commands"; +import electronIsDev from "electron-is-dev"; -// Prepare the renderer once the app is ready -let _mainWindow: BrowserWindow | null = null; +let mainWindow: BrowserWindow | null; -const getMainWindow = () => { - if (!_mainWindow) { - _mainWindow = new BrowserWindow({ - icon: join(__dirname, "build", "icon.png"), - width: 1300, - height: 940, - minHeight: 500, - minWidth: 500, - show: false, - backgroundColor: "#171717", - webPreferences: { - nodeIntegration: true, - nodeIntegrationInWorker: true, - webSecurity: false, - preload: join(__dirname, "preload.js"), - }, - titleBarStyle: getPlatform() === "mac" ? "hiddenInset" : "default", - }); - } +const createMainWindow = () => { + mainWindow = new BrowserWindow({ + icon: join(__dirname, "build", "icon.png"), + width: 1300, + height: 940, + minHeight: 500, + minWidth: 500, + show: false, + backgroundColor: "#171717", + webPreferences: { + nodeIntegration: true, + nodeIntegrationInWorker: true, + webSecurity: false, + preload: join(__dirname, "preload.js"), + }, + titleBarStyle: getPlatform() === "mac" ? "hiddenInset" : "default", + }); - return _mainWindow; -}; + mainWindow.setMenuBarVisibility(false); -const mainWindow = getMainWindow(); - -app.on("ready", async () => { - await prepareNext("./renderer"); - - log.info("🚀 UPSCAYL EXEC PATH: ", execPath("realesrgan")); - log.info("🚀 MODELS PATH: ", modelsPath); - - const url = isDev + const url = electronIsDev ? "http://localhost:8000" : (new URL("file:///").pathname = join( __dirname, "../renderer/out/index.html" )).toString(); - - mainWindow.setMenuBarVisibility(false); mainWindow.loadURL(url); mainWindow.webContents.setWindowOpenHandler(({ url }) => { @@ -68,21 +51,8 @@ app.on("ready", async () => { mainWindow.once("ready-to-show", () => { if (!mainWindow) return; mainWindow.show(); - mainWindow.webContents.setZoomFactor(1); }); - app.whenReady().then(() => { - protocol.handle("file", (request) => { - const pathname = decodeURI(request.url.replace("file:///", "")); - return net.fetch(pathname); - }); - }); - - if (!isDev) { - autoUpdater.checkForUpdates(); - } - - // <------------------------Save Last Paths-----------------------------> // GET LAST IMAGE PATH TO LOCAL STORAGE mainWindow.webContents .executeJavaScript('localStorage.getItem("lastImagePath");', true) @@ -138,7 +108,19 @@ app.on("ready", async () => { } } }); + // GET IMAGE QUALITY (NUMBER) TO LOCAL STORAGE + mainWindow.webContents + .executeJavaScript('localStorage.getItem("overwrite");', true) + .then((lastSavedOverwrite: string | null) => { + if (lastSavedOverwrite !== null) { + setOverwrite(lastSavedOverwrite === "true"); + } + }); mainWindow.webContents.send(COMMAND.OS, getPlatform()); -}); +}; -export default mainWindow; +const getMainWindow = () => { + return mainWindow; +}; + +export { createMainWindow, getMainWindow }; diff --git a/electron/utils/config-variables.ts b/electron/utils/config-variables.ts index 18b5355..84e4722 100644 --- a/electron/utils/config-variables.ts +++ b/electron/utils/config-variables.ts @@ -1,89 +1,49 @@ import { ChildProcessWithoutNullStreams } from "child_process"; -let _imagePath: string | undefined = undefined; -let _folderPath: string | undefined = undefined; -let _customModelsFolderPath: string | undefined = undefined; -let _outputFolderPath: string | undefined = undefined; -let _saveOutputFolder = false; -let _quality = 0; -let _overwrite = false; -let _stop = false; -let childProcesses: { +export let imagePath: string | undefined = ""; +export let folderPath: string | undefined = undefined; +export let customModelsFolderPath: string | undefined = undefined; +export let outputFolderPath: string | undefined = undefined; +export let saveOutputFolder = false; +export let quality = 0; +export let overwrite = false; +export let stopped = false; +export let childProcesses: { process: ChildProcessWithoutNullStreams; kill: () => boolean; }[] = []; -// GETTERS -export function getImagePath(): string | undefined { - return _imagePath; -} - export function setImagePath(value: string | undefined): void { - _imagePath = value; -} - -export function getFolderPath(): string | undefined { - return _folderPath; + imagePath = value; } export function setFolderPath(value: string | undefined): void { - _folderPath = value; -} - -export function getCustomModelsFolderPath(): string | undefined { - return _customModelsFolderPath; + folderPath = value; } export function setCustomModelsFolderPath(value: string | undefined): void { - _customModelsFolderPath = value; -} - -export function getOutputFolderPath(): string | undefined { - return _outputFolderPath; -} - -export function getStop(): boolean { - return _stop; -} - -export function getChildProcesses(): { - process: ChildProcessWithoutNullStreams; - kill: () => boolean; -}[] { - return childProcesses; + customModelsFolderPath = value; } // SETTERS export function setOutputFolderPath(value: string | undefined): void { - _outputFolderPath = value; -} - -export function getSaveOutputFolder(): boolean { - return _saveOutputFolder; + outputFolderPath = value; } export function setSaveOutputFolder(value: boolean): void { - _saveOutputFolder = value; -} - -export function getQuality(): number { - return _quality; + saveOutputFolder = value; } export function setQuality(value: number): void { - _quality = value; -} - -export function getOverwrite(): boolean { - return _overwrite; + quality = value; } export function setOverwrite(value: boolean): void { - _overwrite = value; + overwrite = value; } -export function setStop(value: boolean): void { - _stop = value; +export function setStopped(value: boolean): void { + stopped = value; } export function setChildProcesses(value: { diff --git a/electron/utils/convert-and-scale.ts b/electron/utils/convert-and-scale.ts index fc8dfcd..24022d0 100644 --- a/electron/utils/convert-and-scale.ts +++ b/electron/utils/convert-and-scale.ts @@ -1,7 +1,7 @@ import sharp from "sharp"; -import mainWindow from "../main-window"; -import { getQuality } from "./config-variables"; import logit from "./logit"; +import { getMainWindow } from "../main-window"; +import { quality } from "./config-variables"; const convertAndScale = async ( originalImagePath: string, @@ -11,6 +11,8 @@ const convertAndScale = async ( saveImageAs: string, onError: (error: any) => void ) => { + const mainWindow = getMainWindow(); + const originalImage = await sharp(originalImagePath).metadata(); if (!mainWindow || !originalImage) { throw new Error("Could not grab the original image!"); @@ -24,10 +26,10 @@ const convertAndScale = async ( .withMetadata(); // Keep metadata // Change the output according to the saveImageAs if (saveImageAs === "png") { - newImage.png({ quality: 100 - getQuality() }); + newImage.png({ quality: 100 - quality }); } else if (saveImageAs === "jpg") { - console.log("Quality: ", getQuality()); - newImage.jpeg({ quality: 100 - getQuality() }); + console.log("Quality: ", quality); + newImage.jpeg({ quality: 100 - quality }); } // Save the image const buffer = await newImage.toBuffer(); diff --git a/electron/utils/logit.ts b/electron/utils/logit.ts index d16a1f3..14bb572 100644 --- a/electron/utils/logit.ts +++ b/electron/utils/logit.ts @@ -1,10 +1,11 @@ -import Logger from "electron-log"; -import mainWindow from "../main-window"; +import log from "electron-log"; import COMMAND from "../constants/commands"; +import { getMainWindow } from "../main-window"; const logit = (...args: any) => { - Logger.log(...args); + const mainWindow = getMainWindow(); if (!mainWindow) return; + log.log(...args); mainWindow.webContents.send(COMMAND.LOG, args.join(" ")); }; diff --git a/renderer/firebase.ts b/renderer/firebase.ts index 71f4f36..262570a 100644 --- a/renderer/firebase.ts +++ b/renderer/firebase.ts @@ -20,7 +20,6 @@ const firebaseConfig = { // Initialize Firebase const app = initializeApp(firebaseConfig); export const db = getFirestore(app); -console.log("🚀 => file: firebase.ts:23 => db:", db); const createCollection = (collectionName: string) => { return collection(db, collectionName) as CollectionReference; diff --git a/renderer/pages/index.tsx b/renderer/pages/index.tsx index 06135a2..0e5b4da 100644 --- a/renderer/pages/index.tsx +++ b/renderer/pages/index.tsx @@ -1,6 +1,6 @@ "use client"; import { useState, useEffect, useCallback } from "react"; -import commands from "../../electron/constants/commands"; +import COMMAND from "../../electron/constants/commands"; import { ReactCompareSlider } from "react-compare-slider"; import Header from "../components/Header"; import Footer from "../components/Footer"; @@ -89,7 +89,7 @@ const Home = () => { }; window.electron.on( - commands.OS, + COMMAND.OS, (_, data: "linux" | "mac" | "win" | undefined) => { if (data) { setOs(data); @@ -98,21 +98,21 @@ const Home = () => { ); // LOG - window.electron.on(commands.LOG, (_, data: string) => { + window.electron.on(COMMAND.LOG, (_, data: string) => { logit(`🐞 BACKEND REPORTED: `, data); }); - window.electron.on(commands.SCALING_AND_CONVERTING, (_, data: string) => { + window.electron.on(COMMAND.SCALING_AND_CONVERTING, (_, data: string) => { setProgress("Processing the image..."); }); - window.electron.on(commands.UPSCAYL_ERROR, (_, data: string) => { + window.electron.on(COMMAND.UPSCAYL_ERROR, (_, data: string) => { alert(data); resetImagePaths(); }); // UPSCAYL PROGRESS - window.electron.on(commands.UPSCAYL_PROGRESS, (_, data: string) => { + window.electron.on(COMMAND.UPSCAYL_PROGRESS, (_, data: string) => { if (data.length > 0 && data.length < 10) { setProgress(data); } else if (data.includes("converting")) { @@ -123,7 +123,7 @@ const Home = () => { }); // FOLDER UPSCAYL PROGRESS - window.electron.on(commands.FOLDER_UPSCAYL_PROGRESS, (_, data: string) => { + window.electron.on(COMMAND.FOLDER_UPSCAYL_PROGRESS, (_, data: string) => { if (data.length > 0 && data.length < 10) { setProgress(data); } @@ -132,7 +132,7 @@ const Home = () => { }); // DOUBLE UPSCAYL PROGRESS - window.electron.on(commands.DOUBLE_UPSCAYL_PROGRESS, (_, data: string) => { + window.electron.on(COMMAND.DOUBLE_UPSCAYL_PROGRESS, (_, data: string) => { if (data.length > 0 && data.length < 10) { if (data === "0.00%") { setDoubleUpscaylCounter(doubleUpscaylCounter + 1); @@ -144,7 +144,7 @@ const Home = () => { }); // UPSCAYL DONE - window.electron.on(commands.UPSCAYL_DONE, (_, data: string) => { + window.electron.on(COMMAND.UPSCAYL_DONE, (_, data: string) => { setProgress(""); setTimeout(() => setUpscaledImagePath(data), 500); logit("upscaledImagePath: ", data); @@ -152,14 +152,14 @@ const Home = () => { }); // FOLDER UPSCAYL DONE - window.electron.on(commands.FOLDER_UPSCAYL_DONE, (_, data: string) => { + window.electron.on(COMMAND.FOLDER_UPSCAYL_DONE, (_, data: string) => { setProgress(""); setUpscaledBatchFolderPath(data); logit(`💯 FOLDER_UPSCAYL_DONE: `, data); }); // DOUBLE UPSCAYL DONE - window.electron.on(commands.DOUBLE_UPSCAYL_DONE, (_, data: string) => { + window.electron.on(COMMAND.DOUBLE_UPSCAYL_DONE, (_, data: string) => { setProgress(""); setDoubleUpscaylCounter(0); setUpscaledImagePath(data); @@ -167,27 +167,24 @@ const Home = () => { }); // CUSTOM FOLDER LISTENER - window.electron.on( - commands.CUSTOM_MODEL_FILES_LIST, - (_, data: string[]) => { - logit(`📜 CUSTOM_MODEL_FILES_LIST: `, data); - const newModelOptions = data.map((model) => { - return { - value: model, - label: model, - }; - }); + window.electron.on(COMMAND.CUSTOM_MODEL_FILES_LIST, (_, data: string[]) => { + logit(`📜 CUSTOM_MODEL_FILES_LIST: `, data); + const newModelOptions = data.map((model) => { + return { + value: model, + label: model, + }; + }); - // Add newModelsList to modelOptions and remove duplicates - const combinedModelOptions = [...modelOptions, ...newModelOptions]; - const uniqueModelOptions = combinedModelOptions.filter( - // Check if any model in the array appears more than once - (model, index, array) => - array.findIndex((t) => t.value === model.value) === index - ); - setModelOptions(uniqueModelOptions); - } - ); + // Add newModelsList to modelOptions and remove duplicates + const combinedModelOptions = [...modelOptions, ...newModelOptions]; + const uniqueModelOptions = combinedModelOptions.filter( + // Check if any model in the array appears more than once + (model, index, array) => + array.findIndex((t) => t.value === model.value) === index + ); + setModelOptions(uniqueModelOptions); + }); if (!localStorage.getItem("upscaylCloudModalShown")) { logit("⚙️ upscayl cloud show to true"); localStorage.setItem("upscaylCloudModalShown", "true"); @@ -201,7 +198,7 @@ const Home = () => { ); if (customModelsPath !== null) { - window.electron.send(commands.GET_MODELS_LIST, customModelsPath); + window.electron.send(COMMAND.GET_MODELS_LIST, customModelsPath); logit("🎯 GET_MODELS_LIST: ", customModelsPath); } }, []); @@ -267,7 +264,7 @@ const Home = () => { const selectImageHandler = async () => { resetImagePaths(); - var path = await window.electron.invoke(commands.SELECT_FILE); + var path = await window.electron.invoke(COMMAND.SELECT_FILE); if (path !== null) { logit("🖼 Selected Image Path: ", path); @@ -281,7 +278,7 @@ const Home = () => { const selectFolderHandler = async () => { resetImagePaths(); - var path = await window.electron.invoke(commands.SELECT_FOLDER); + var path = await window.electron.invoke(COMMAND.SELECT_FOLDER); if (path !== null) { logit("🖼 Selected Folder Path: ", path); @@ -319,7 +316,7 @@ const Home = () => { const openFolderHandler = (e) => { logit("📂 OPEN_FOLDER: ", upscaledBatchFolderPath); - window.electron.send(commands.OPEN_FOLDER, upscaledBatchFolderPath); + window.electron.send(COMMAND.OPEN_FOLDER, upscaledBatchFolderPath); }; const handleDrop = (e) => { @@ -380,7 +377,7 @@ const Home = () => { }; const outputHandler = async () => { - var path = await window.electron.invoke(commands.SELECT_FOLDER); + var path = await window.electron.invoke(COMMAND.SELECT_FOLDER); if (path !== null) { logit("🗂 Setting Output Path: ", path); setOutputPath(path); @@ -405,7 +402,7 @@ const Home = () => { setProgress("Hold on..."); if (doubleUpscayl) { - window.electron.send(commands.DOUBLE_UPSCAYL, { + window.electron.send(COMMAND.DOUBLE_UPSCAYL, { imagePath, outputPath, model, @@ -416,7 +413,7 @@ const Home = () => { logit("🏁 DOUBLE_UPSCAYL"); } else if (batchMode) { setDoubleUpscayl(false); - window.electron.send(commands.FOLDER_UPSCAYL, { + window.electron.send(COMMAND.FOLDER_UPSCAYL, { scaleFactor, batchFolderPath, outputPath, @@ -427,7 +424,7 @@ const Home = () => { }); logit("🏁 FOLDER_UPSCAYL"); } else { - window.electron.send(commands.UPSCAYL, { + window.electron.send(COMMAND.UPSCAYL, { scaleFactor, imagePath, outputPath, @@ -457,7 +454,7 @@ const Home = () => { }; const stopHandler = () => { - window.electron.send(commands.STOP); + window.electron.send(COMMAND.STOP); logit("🛑 Stopping Upscayl"); resetImagePaths(); }; @@ -588,10 +585,7 @@ const Home = () => { hideZoomOptions={true} /> { setDimensions({ width: e.target.naturalWidth,