Skip to content

Commit

Permalink
Adding electron support
Browse files Browse the repository at this point in the history
  • Loading branch information
jakelauer committed Apr 26, 2021
1 parent 4df0763 commit 2d6f917
Show file tree
Hide file tree
Showing 14 changed files with 1,250 additions and 92 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/node_modules/
/src/scratch/
/src/secrets.js
/scratch/
/dist/
/logs/
2 changes: 2 additions & 0 deletions .idea/teslafy.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

74 changes: 68 additions & 6 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
"name": "teslafy",
"version": "1.0.0",
"description": "",
"main": "index.js",
"main": "src/main.js",
"scripts": {
"run": "node src/server.js",
"electron": "electron ./src/main.js",
"build": "electron-packager ./ Teslafy --out=./dist --platform=win32 --override",
"start": "forever start src/server.js",
"stop": "forever stop src/server.js",
"restart": "forever restart src/server.js"
Expand All @@ -18,6 +21,10 @@
"url": "https://github.com/jakelauer/teslafy/issues"
},
"dependencies": {
"electron-prompt": "^1.6.2",
"electron": "11.4.3",
"electron-packager": "^15.2.0",
"electron-preferences": "^2.2.0",
"body-parser": "^1.19.0",
"compression": "^1.7.4",
"cookie-parser": "^1.4.5",
Expand Down
122 changes: 122 additions & 0 deletions src/electron.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
const { app: electronApp, BrowserWindow, Menu, Tray} = require("electron");
const path = require('path');
const prefs = require("./preferences").prefs;

const gotTheLock = electronApp.requestSingleInstanceLock()

if (!gotTheLock) {
electronApp.quit()
}

const restart = () => {
electronApp.exit();
electronApp.relaunch();
}

let appIcon = null;
const start = () => {
const doStart = (window) => {
const teslaUsername = prefs.value("Settings.teslaUsername");
const spotifyClientId = prefs.value("Settings.spotifyClientId");
const spotifyClientSecret = prefs.value("Settings.spotifyClientSecret");
const port = prefs.value("Settings.port");

if(!port || !teslaUsername || !spotifyClientId || !spotifyClientSecret)
{
prefs.show();
let x = setInterval(() => prefs.save(), 250);
prefs.prefsWindow.on("closed", () => {
restart()
});
}
else
{
window.loadURL(`http://localhost:${port}/start`)
}
}

function createWindow()
{
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});

const menu = Menu.buildFromTemplate([
{
label: "Settings",
click: () => prefs.show()
},
{
label: "Quit",
click: () => {
electronApp.isQuitting = true;
electronApp.quit();
electronApp.exit();
}
}
])

Menu.setApplicationMenu(menu);

import("./server.js").then(() => {
setTimeout(() => doStart(win), 500);
})

win.on('minimize',function(event){
event.preventDefault();
win.hide();
});

win.on('close', function (event) {
if(!electronApp.isQuitting){
event.preventDefault();
win.hide();
}

return false;
});

var contextMenu = Menu.buildFromTemplate([
{ label: 'Show App', click: function(){
win.show();
} },
{ label: 'Quit', click: function(){
electronApp.isQuitting = true;
electronApp.quit();
electronApp.exit();
} }
]);

appIcon = new Tray(path.join(__dirname, "icon.png"));
appIcon.setContextMenu(contextMenu);
}

electronApp.whenReady().then(() => {
createWindow()

electronApp.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0)
{
createWindow()
}
})
})

electronApp.on('window-all-closed', () => {
if (process.platform !== 'darwin')
{
electronApp.quit()
}
})
}

module.exports = {
start,
electronApp,
restart,
prefs
}
28 changes: 16 additions & 12 deletions src/engine.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
const SpotifyWebApi = require("spotify-web-api-node");
const {spotifyClientId, spotifyClientSecret, spotifyRedirectUrl} = require("./secrets");
const {getVehicleStatus} = require("./vehicle");
const {getVehicle} = require("./vehicle");
const {socketError} = require("./socketlog");
const {pause} = require("./vehicle");
const {socketLog} = require("./socketlog");
const {prefs} = require("./electron");

const spotifyClientId = prefs.value("Settings.spotifyClientId");
const spotifyClientSecret = prefs.value("Settings.spotifyClientSecret");
const port = prefs.value("Settings.port");
const redirectUri = `http://localhost:${port}/auth`;

console.log(spotifyClientId, spotifyClientSecret, port, redirectUri);
const spotifyClient = new SpotifyWebApi({
clientId: spotifyClientId,
clientSecret: spotifyClientSecret,
redirectUri: spotifyRedirectUrl
redirectUri
});

let musicError = null;

const isUserPlayingMusic = async () => {
if (!spotifyClient.getRefreshToken())
{
socketError("Visit /start to initialize Spotify");

return false;
}

Expand All @@ -28,8 +34,10 @@ const isUserPlayingMusic = async () => {
{
playing = true;
}
musicError = null;
} catch (e)
{
musicError = e;
console.error(e);
}

Expand Down Expand Up @@ -80,8 +88,11 @@ const teslaStatus = async () => {
let lastDetectedPlaying = 0;
let lastDetectedUser = 0;
let lastTookAction = 0;
let checkTimeout = 0;
const checkAndTryPause = async (lastStatus) => {
let status;
clearTimeout(checkTimeout);

try
{
status = await teslaStatus();
Expand Down Expand Up @@ -136,14 +147,7 @@ const checkAndTryPause = async (lastStatus) => {
socketError(e);
}

if (!spotifyClient.getRefreshToken())
{
socketError("Visit /start to initialize Spotify");
}
else
{
setTimeout(() => checkAndTryPause(status), 500);
}
checkTimeout = setTimeout(() => checkAndTryPause(status), 500);
};

module.exports = {
Expand Down
Binary file added src/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 2d6f917

Please sign in to comment.