diff --git a/.vite/build/main.js b/.vite/build/main.js index f959cc5..aa743aa 100644 --- a/.vite/build/main.js +++ b/.vite/build/main.js @@ -1,5 +1,5 @@ -"use strict";const h=require("electron"),P=require("path"),T=require("child_process"),z=require("tty"),G=require("util"),I=require("fs"),J=require("net");function Z(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var O={exports:{}},b={exports:{}},q={exports:{}},_,A;function H(){if(A)return _;A=1;var s=1e3,e=s*60,u=e*60,c=u*24,f=c*365.25;_=function(r,n){n=n||{};var o=typeof r;if(o==="string"&&r.length>0)return v(r);if(o==="number"&&isNaN(r)===!1)return n.long?m(r):g(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function v(r){if(r=String(r),!(r.length>100)){var n=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(r);if(n){var o=parseFloat(n[1]),d=(n[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return o*f;case"days":case"day":case"d":return o*c;case"hours":case"hour":case"hrs":case"hr":case"h":return o*u;case"minutes":case"minute":case"mins":case"min":case"m":return o*e;case"seconds":case"second":case"secs":case"sec":case"s":return o*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}}}function g(r){return r>=c?Math.round(r/c)+"d":r>=u?Math.round(r/u)+"h":r>=e?Math.round(r/e)+"m":r>=s?Math.round(r/s)+"s":r+"ms"}function m(r){return a(r,c,"day")||a(r,u,"hour")||a(r,e,"minute")||a(r,s,"second")||r+" ms"}function a(r,n,o){if(!(r=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}e.formatters.j=function(a){try{return JSON.stringify(a)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}};function c(a){var r=this.useColors;if(a[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+a[0]+(r?"%c ":" ")+"+"+e.humanize(this.diff),!!r){var n="color: "+this.color;a.splice(1,0,n,"color: inherit");var o=0,d=0;a[0].replace(/%[a-zA-Z%]/g,function(i){i!=="%%"&&(o++,i==="%c"&&(d=o))}),a.splice(d,0,n)}}function f(){return typeof console=="object"&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function v(a){try{a==null?e.storage.removeItem("debug"):e.storage.debug=a}catch{}}function g(){var a;try{a=e.storage.debug}catch{}return!a&&typeof process<"u"&&"env"in process&&(a=process.env.DEBUG),a}e.enable(g());function m(){try{return window.localStorage}catch{}}}(b,b.exports)),b.exports}var C={exports:{}},U;function Y(){return U||(U=1,function(s,e){var u=z,c=G;e=s.exports=R(),e.init=d,e.log=a,e.formatArgs=m,e.save=r,e.load=n,e.useColors=g,e.colors=[6,2,3,4,5,1],e.inspectOpts=Object.keys(process.env).filter(function(i){return/^debug_/i.test(i)}).reduce(function(i,t){var p=t.substring(6).toLowerCase().replace(/_([a-z])/g,function(w,y){return y.toUpperCase()}),l=process.env[t];return/^(yes|on|true|enabled)$/i.test(l)?l=!0:/^(no|off|false|disabled)$/i.test(l)?l=!1:l==="null"?l=null:l=Number(l),i[p]=l,i},{});var f=parseInt(process.env.DEBUG_FD,10)||2;f!==1&&f!==2&&c.deprecate(function(){},"except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();var v=f===1?process.stdout:f===2?process.stderr:o(f);function g(){return"colors"in e.inspectOpts?!!e.inspectOpts.colors:u.isatty(f)}e.formatters.o=function(i){return this.inspectOpts.colors=this.useColors,c.inspect(i,this.inspectOpts).split(` +"use strict";const h=require("electron"),O=require("path"),T=require("child_process"),z=require("tty"),G=require("util"),I=require("fs"),J=require("net");function Z(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var S={exports:{}},b={exports:{}},q={exports:{}},_,D;function H(){if(D)return _;D=1;var o=1e3,e=o*60,u=e*60,c=u*24,f=c*365.25;_=function(r,n){n=n||{};var s=typeof r;if(s==="string"&&r.length>0)return v(r);if(s==="number"&&isNaN(r)===!1)return n.long?m(r):g(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function v(r){if(r=String(r),!(r.length>100)){var n=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(r);if(n){var s=parseFloat(n[1]),d=(n[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return s*f;case"days":case"day":case"d":return s*c;case"hours":case"hour":case"hrs":case"hr":case"h":return s*u;case"minutes":case"minute":case"mins":case"min":case"m":return s*e;case"seconds":case"second":case"secs":case"sec":case"s":return s*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}function g(r){return r>=c?Math.round(r/c)+"d":r>=u?Math.round(r/u)+"h":r>=e?Math.round(r/e)+"m":r>=o?Math.round(r/o)+"s":r+"ms"}function m(r){return a(r,c,"day")||a(r,u,"hour")||a(r,e,"minute")||a(r,o,"second")||r+" ms"}function a(r,n,s){if(!(r=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}e.formatters.j=function(a){try{return JSON.stringify(a)}catch(r){return"[UnexpectedJSONParseError]: "+r.message}};function c(a){var r=this.useColors;if(a[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+a[0]+(r?"%c ":" ")+"+"+e.humanize(this.diff),!!r){var n="color: "+this.color;a.splice(1,0,n,"color: inherit");var s=0,d=0;a[0].replace(/%[a-zA-Z%]/g,function(i){i!=="%%"&&(s++,i==="%c"&&(d=s))}),a.splice(d,0,n)}}function f(){return typeof console=="object"&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function v(a){try{a==null?e.storage.removeItem("debug"):e.storage.debug=a}catch{}}function g(){var a;try{a=e.storage.debug}catch{}return!a&&typeof process<"u"&&"env"in process&&(a=process.env.DEBUG),a}e.enable(g());function m(){try{return window.localStorage}catch{}}}(b,b.exports)),b.exports}var C={exports:{}},U;function Y(){return U||(U=1,function(o,e){var u=z,c=G;e=o.exports=R(),e.init=d,e.log=a,e.formatArgs=m,e.save=r,e.load=n,e.useColors=g,e.colors=[6,2,3,4,5,1],e.inspectOpts=Object.keys(process.env).filter(function(i){return/^debug_/i.test(i)}).reduce(function(i,t){var p=t.substring(6).toLowerCase().replace(/_([a-z])/g,function(w,y){return y.toUpperCase()}),l=process.env[t];return/^(yes|on|true|enabled)$/i.test(l)?l=!0:/^(no|off|false|disabled)$/i.test(l)?l=!1:l==="null"?l=null:l=Number(l),i[p]=l,i},{});var f=parseInt(process.env.DEBUG_FD,10)||2;f!==1&&f!==2&&c.deprecate(function(){},"except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();var v=f===1?process.stdout:f===2?process.stderr:s(f);function g(){return"colors"in e.inspectOpts?!!e.inspectOpts.colors:u.isatty(f)}e.formatters.o=function(i){return this.inspectOpts.colors=this.useColors,c.inspect(i,this.inspectOpts).split(` `).map(function(t){return t.trim()}).join(" ")},e.formatters.O=function(i){return this.inspectOpts.colors=this.useColors,c.inspect(i,this.inspectOpts)};function m(i){var t=this.namespace,p=this.useColors;if(p){var l=this.color,w=" \x1B[3"+l+";1m"+t+" \x1B[0m";i[0]=w+i[0].split(` `).join(` `+w),i.push("\x1B[3"+l+"m+"+e.humanize(this.diff)+"\x1B[0m")}else i[0]=new Date().toUTCString()+" "+t+" "+i[0]}function a(){return v.write(c.format.apply(c,arguments)+` -`)}function r(i){i==null?delete process.env.DEBUG:process.env.DEBUG=i}function n(){return process.env.DEBUG}function o(i){var t,p=process.binding("tty_wrap");switch(p.guessHandleType(i)){case"TTY":t=new u.WriteStream(i),t._type="tty",t._handle&&t._handle.unref&&t._handle.unref();break;case"FILE":var l=I;t=new l.SyncWriteStream(i,{autoClose:!1}),t._type="fs";break;case"PIPE":case"TCP":var w=J;t=new w.Socket({fd:i,readable:!1,writable:!0}),t.readable=!1,t.read=null,t._type="pipe",t._handle&&t._handle.unref&&t._handle.unref();break;default:throw new Error("Implement me. Unknown stream file type!")}return t.fd=i,t._isStdio=!0,t}function d(i){i.inspectOpts={};for(var t=Object.keys(e.inspectOpts),p=0;p{c({pid:s,tid:e,vid:u,value:0})})},set(s,e,u,c){return new Promise((f,v)=>{f({pid:s,tid:e,vid:u,value:c})})},onValueReceived(s){}};ee&&h.app.quit();const N=()=>{const s=new h.BrowserWindow({width:1100,height:912,webPreferences:{preload:P.join(__dirname,"preload.js")}});return s.loadURL("http://localhost:5173"),s.webContents.openDevTools(),s};h.app.whenReady().then(()=>{h.ipcMain.handle("nanodevices:list",E.list),h.ipcMain.handle("nanodevices:connect",E.connect),h.ipcMain.handle("nanodevices:disconnect",E.disconnect),h.ipcMain.handle("nano:get",B.get),h.ipcMain.handle("nano:set",B.set),N()});h.app.on("window-all-closed",()=>{process.platform!=="darwin"&&h.app.quit()});h.app.on("activate",()=>{h.BrowserWindow.getAllWindows().length===0&&N()}); +`)}function r(i){i==null?delete process.env.DEBUG:process.env.DEBUG=i}function n(){return process.env.DEBUG}function s(i){var t,p=process.binding("tty_wrap");switch(p.guessHandleType(i)){case"TTY":t=new u.WriteStream(i),t._type="tty",t._handle&&t._handle.unref&&t._handle.unref();break;case"FILE":var l=I;t=new l.SyncWriteStream(i,{autoClose:!1}),t._type="fs";break;case"PIPE":case"TCP":var w=J;t=new w.Socket({fd:i,readable:!1,writable:!0}),t.readable=!1,t.read=null,t._type="pipe",t._handle&&t._handle.unref&&t._handle.unref();break;default:throw new Error("Implement me. Unknown stream file type!")}return t.fd=i,t._isStdio=!0,t}function d(i){i.inspectOpts={};for(var t=Object.keys(e.inspectOpts),p=0;p{c({pid:o,tid:e,vid:u,value:0})})},set(o,e,u,c){return new Promise((f,v)=>{f({pid:o,tid:e,vid:u,value:c})})},onValueReceived(o){}};ee&&h.app.quit();const N=()=>{const o=new h.BrowserWindow({width:1100,height:912,icon:O.join(__dirname,"../renderer/main_window/assets/favicon.png"),webPreferences:{preload:O.join(__dirname,"preload.js")}});return o.loadURL("http://localhost:5173"),o.webContents.openDevTools(),o};h.app.whenReady().then(()=>{h.ipcMain.handle("nanodevices:list",E.list),h.ipcMain.handle("nanodevices:connect",E.connect),h.ipcMain.handle("nanodevices:disconnect",E.disconnect),h.ipcMain.handle("nano:get",P.get),h.ipcMain.handle("nano:set",P.set),N()});h.app.on("window-all-closed",()=>{process.platform!=="darwin"&&h.app.quit()});h.app.on("activate",()=>{h.BrowserWindow.getAllWindows().length===0&&N()}); diff --git a/forge.config.js b/forge.config.js index 0440335..8da903b 100644 --- a/forge.config.js +++ b/forge.config.js @@ -1,5 +1,7 @@ module.exports = { - packagerConfig: {}, + packagerConfig: { + icon: 'src/assets/favicon', + }, rebuildConfig: {}, makers: [ { diff --git a/index.html b/index.html index 0c5a23e..c7b268a 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@ - + - Zero-One : Haptic Configuration Tool + ZERO/ONE : Haptic Configuration Tool
diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico new file mode 100644 index 0000000..74da50f Binary files /dev/null and b/src/assets/favicon.ico differ diff --git a/src/assets/favico.png b/src/assets/favicon.png similarity index 100% rename from src/assets/favico.png rename to src/assets/favicon.png diff --git a/src/main.js b/src/main.js index 5e12109..0e0cdda 100644 --- a/src/main.js +++ b/src/main.js @@ -1,14 +1,14 @@ -import { app, BrowserWindow } from 'electron'; -import path from 'path'; -import ess from 'electron-squirrel-startup'; -import { ipcMain } from 'electron'; -import nanodevices from './backend/nanodevices.js'; -import nano from './backend/nano.js'; +import { app, BrowserWindow } from 'electron' +import path from 'path' +import ess from 'electron-squirrel-startup' +import { ipcMain } from 'electron' +import nanodevices from './backend/nanodevices.js' +import nano from './backend/nano.js' // Handle creating/removing shortcuts on Windows when installing/uninstalling. if (ess) { - app.quit(); + app.quit() } const createWindow = () => { @@ -16,64 +16,65 @@ const createWindow = () => { const mainWindow = new BrowserWindow({ width: 1100, height: 912, + icon: path.join(__dirname, '../renderer/main_window/assets/favicon.png'), webPreferences: { preload: path.join(__dirname, 'preload.js'), }, - }); + }) // and load the index.html of the app. if (MAIN_WINDOW_VITE_DEV_SERVER_URL) { - mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL); + mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL) } else { - mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`)); + mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`)) } // Open the DevTools. - mainWindow.webContents.openDevTools(); + mainWindow.webContents.openDevTools() - return mainWindow; -}; + return mainWindow +} // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(() => { - ipcMain.handle('nanodevices:list', nanodevices.list); - ipcMain.handle('nanodevices:connect', nanodevices.connect); - ipcMain.handle('nanodevices:disconnect', nanodevices.disconnect); - ipcMain.handle('nano:get', nano.get); - ipcMain.handle('nano:set', nano.set); - const mainWindow = createWindow(); + ipcMain.handle('nanodevices:list', nanodevices.list) + ipcMain.handle('nanodevices:connect', nanodevices.connect) + ipcMain.handle('nanodevices:disconnect', nanodevices.disconnect) + ipcMain.handle('nano:get', nano.get) + ipcMain.handle('nano:set', nano.set) + const mainWindow = createWindow() nanodevices.onAttach((device) => { - console.log("Attached device", device); - mainWindow.webContents.send('nanodevice-attached', device); - }); + console.log('Attached device', device) + mainWindow.webContents.send('nanodevice-attached', device) + }) nanodevices.onDetach((device) => { - console.log("Detached device", device); - mainWindow.webContents.send('nanodevice-detached', device); - }); + console.log('Detached device', device) + mainWindow.webContents.send('nanodevice-detached', device) + }) nano.onValueReceived((value) => { - console.log("Value received", value); - mainWindow.webContents.send('nano-onvalue', value); - }); -}); + console.log('Value received', value) + mainWindow.webContents.send('nano-onvalue', value) + }) +}) // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on('window-all-closed', () => { if (process.platform !== 'darwin') { - app.quit(); + app.quit() } -}); +}) app.on('activate', () => { // On OS X it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) { - createWindow(); + createWindow() } -}); +}) // In this file you can include the rest of your app's specific main process // code. You can also put them in separate files and import them here.