Skip to content

Commit

Permalink
ipc update, builds, theme
Browse files Browse the repository at this point in the history
  • Loading branch information
Evan Trowbridge committed Dec 15, 2022
1 parent 13823ac commit 69af3a2
Show file tree
Hide file tree
Showing 21 changed files with 903 additions and 793 deletions.
533 changes: 0 additions & 533 deletions CHANGELOG.md

This file was deleted.

5 changes: 5 additions & 0 deletions assets/sql/create-availableBuilds.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE TABLE IF NOT EXISTS availableBuilds (
version TEXT NOT NULL PRIMARY KEY,
build TEXT NOT NULL,
path TEXT NOT NULL
);
3 changes: 2 additions & 1 deletion assets/sql/create-settings.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
CREATE TABLE IF NOT EXISTS settings (
hostname TEXT NOT NULL PRIMARY KEY,
menuOpen BIT DEFAULT 1 NOT NULL,
hostname TEXT,
instanceLocation TEXT,
buildLocation TEXT,
extractMsi BIT DEFAULT 0 NOT NULL,
Expand Down
2 changes: 1 addition & 1 deletion release/app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "acuamtica-dev-tools",
"version": "1.0.0",
"version": "1.0.1",
"description": "Acumatica ERP Development Tools",
"license": "MIT",
"author": {
Expand Down
28 changes: 21 additions & 7 deletions src/main/actions/getInstances.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,23 @@ const sql = require('mssql');
const convert = require('xml-js');
const xmlOptions = { compact: true, spaces: 4 };

const { ipcMain } = require('electron');
const { GetSettings, SendToast } = require('../helpers');

export default async function GetInstances(mainWindow, database) {
try {
var settings = await GetSettings(database, mainWindow).catch((err) => {
console.log('settings err:' + err);
SendToast(
mainWindow,
'Error querying Acuamtica instances (setttings) > ' + err,
'error'
);
});
if (!settings) {
return;
}
console.log('settings:' + settings);

console.log('Getting Acumatica Instance Data');
var sitesData = await loadXml(
'C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config'
Expand All @@ -23,7 +36,7 @@ export default async function GetInstances(mainWindow, database) {
var db = null;
if (
site.virtualDirectory._attributes.physicalPath.startsWith(
'D:\\AcuInstances'
settings.instanceLocation
)
) {
var acuConfig = await loadXml(
Expand Down Expand Up @@ -77,11 +90,12 @@ export default async function GetInstances(mainWindow, database) {
console.log('Complete.');
} catch (error) {
console.log(error);
mainWindow.webContents.send('alert', {
open: true,
text: 'Error querying Acuamtica instances! > ' + error.message,
severity: 'error',
});

SendToast(
mainWindow,
'Error querying Acuamtica instances! > ' + error.message,
'error'
);
}
}

Expand Down
32 changes: 32 additions & 0 deletions src/main/actions/helpers.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { BrowserWindow } from 'electron';
import sqlite from 'sqlite3';

import { AlertColor } from '@mui/material/Alert';

export function GetSettings(db: sqlite.Database, mainWindow: BrowserWindow) {
return new Promise((resolve, reject) => {
db.all('SELECT * FROM settings', [], (err, rows) => {
if (err) {
reject(err.message.toString());
} else {
var settings = rows[0];
resolve({
...settings,
extractMsi: settings.extractMsi == 1 ? true : false,
});
}
});
});
}

export function SendToast(
mainWindow: BrowserWindow,
message: string,
severity: AlertColor
) {
mainWindow.webContents.send('alert', {
open: true,
text: message,
severity: severity,
});
}
32 changes: 32 additions & 0 deletions src/main/helpers.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { BrowserWindow } from 'electron';
import sqlite from 'sqlite3';

import { AlertColor } from '@mui/material/Alert';

export function GetSettings(db: sqlite.Database, mainWindow: BrowserWindow) {
return new Promise((resolve, reject) => {
db.all('SELECT * FROM settings', [], (err, rows) => {
if (err) {
reject(err.message.toString());
} else {
var settings = rows[0];
resolve({
...settings,
extractMsi: settings.extractMsi == 1 ? true : false,
});
}
});
});
}

export function SendToast(
mainWindow: BrowserWindow,
message: string,
severity: AlertColor
) {
mainWindow.webContents.send('alert', {
open: true,
text: message,
severity: severity,
});
}
160 changes: 133 additions & 27 deletions src/main/ipcBuilder.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,150 @@
import { ipcMain } from 'electron';
import { BrowserWindow, ipcMain } from 'electron';
import fs from 'fs';
import sqlite from 'sqlite3';

import GetInstances from './actions/getInstances';
import { SendToast } from './helpers';

export default class IpcBuilder {
app: Electron.App;
db: sqlite.Database;
mainWindow: BrowserWindow;

constructor(db: sqlite.Database) {
constructor(
app: Electron.App,
mainWindow: BrowserWindow,
db: sqlite.Database
) {
this.app = app;
this.db = db;
this.mainWindow = mainWindow;
}

buildIpc() {
ipcMain.on('getSettings', async (event, arg) => {
this.db.all('SELECT * FROM settings', [], (err, rows) => {
if (err) {
console.error(err.message);
event.reply('alert', {
open: true,
text: 'IPC Error! getSettings > ' + err.message,
severity: 'error',
});
} else {
event.reply('setSettings', rows[0]);
}
ipcMain.handle('windowEvents', (event, action) => {
console.log(action);
switch (action) {
case 'close':
this.mainWindow.hide();
break;
case 'maximize':
if (this.mainWindow.isMaximized()) {
this.mainWindow.unmaximize();
} else {
this.mainWindow.maximize();
}
break;
case 'minimize':
this.mainWindow.minimize();
break;
}
return;
});

ipcMain.handle('getSettings', async (event) => {
return new Promise((resolve, reject) => {
this.db.all('SELECT * FROM settings', [], (err, rows) => {
if (err) {
SendToast(
this.mainWindow,
'IPC Error! getSettings > ' + err.message,
'error'
);
reject(err.message.toString());
} else {
var settings = rows[0];

resolve({
...settings,
extractMsi: settings.extractMsi == 1 ? true : false,
});
}
});
});
});

ipcMain.on('getInstances', async (event, arg) => {
this.db.all('SELECT * FROM instances', [], (err, rows) => {
if (err) {
console.error(err.message);
event.reply('alert', {
open: true,
text: 'IPC Error! getInstances > ' + err.message,
severity: 'error',
});
}
ipcMain.handle('checkPath', (event, arg) => {
try {
console.log(arg, fs.existsSync(arg));
return fs.existsSync(arg);
} catch (e) {
SendToast(
this.mainWindow,
'IPC Error! checkPath > ' + (e as Error).message,
'error'
);
return false;
}
});

ipcMain.on('execSQL', (event, query) => {
try {
this.db.all(query, [], (err, rows) => {
if (err) {
console.error(err.message);
SendToast(
this.mainWindow,
'IPC Error! sql > ' + err.message,
'error'
);
}
});
} catch (e) {
SendToast(
this.mainWindow,
'IPC Error! sql > ' + (e as Error).message,
'error'
);
}
});

ipcMain.handle('getInstances', async (event) => {
return new Promise((resolve, reject) => {
this.db.all('SELECT * FROM instances', [], (err, rows) => {
if (err) {
SendToast(
this.mainWindow,
'IPC Error! getInstances > ' + err.message,
'error'
);
reject(err.message.toString());
} else {
resolve(rows);
}
});
});
});

ipcMain.handle('getBuilds', async (event) => {
return new Promise((resolve, reject) => {
try {
this.db.all(
'SELECT buildLocation FROM settings',
[],
async (err, rows) => {
if (err) {
SendToast(
this.mainWindow,
'IPC Error! getBuilds > ' + err.message,
'error'
);
reject(err.message.toString());
} else {
let folders: string[] = await fs.promises.readdir(
rows[0].buildLocation
);

resolve(folders);
}
}
);
} catch (e) {
console.log(e);

if (rows.length > 0) {
event.reply('setInstances', rows);
SendToast(
this.mainWindow,
'IPC Error! sql > ' + (e as Error).message,
'error'
);
}
});
});
Expand Down
25 changes: 17 additions & 8 deletions src/main/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ db.serialize(() => {
.run()
.finalize();

db.prepare(
fs.readFileSync(getAssetPath('sql/create-availableBuilds.sql')).toString()
)
.run()
.finalize();

db.all('SELECT * FROM settings', [], (err, rows) => {
if (err) {
console.error(err.message);
Expand Down Expand Up @@ -126,7 +132,12 @@ const createWindow = async () => {
width: 1600,
height: 900,
icon: getAssetPath('icon.png'),
// autoHideMenuBar: !isDevelopment,
// frame: isDevelopment,
autoHideMenuBar: true,
frame: false,
webPreferences: {
contextIsolation: true,
preload: app.isPackaged
? path.join(__dirname, 'preload.js')
: path.join(__dirname, '../../.erb/dll/preload.js'),
Expand All @@ -150,11 +161,6 @@ const createWindow = async () => {
mainWindow = null;
});

mainWindow.on('minimize', (event: Event) => {
event.preventDefault();
mainWindow?.hide();
});

app.on('before-quit', () => {
isQuiting = true;
});
Expand All @@ -167,10 +173,10 @@ const createWindow = async () => {
}
});

const menuBuilder = new MenuBuilder(mainWindow);
menuBuilder.buildMenu();
// const menuBuilder = new MenuBuilder(mainWindow);
// menuBuilder.buildMenu();

const ipcBuilder = new IpcBuilder(db);
const ipcBuilder = new IpcBuilder(app, mainWindow, db);
ipcBuilder.buildIpc();

// Open urls in the user's browser
Expand Down Expand Up @@ -246,6 +252,9 @@ if (!gotTheLock) {
function StartTasks(mainWindow: BrowserWindow) {
console.log('Starting tasks');
GetInstances(mainWindow, db);

console.log(app.getVersion());

cron.schedule('*/15 * * * *', () => {
GetInstances(mainWindow, db);
});
Expand Down
Loading

0 comments on commit 69af3a2

Please sign in to comment.