Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
contents: write

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/fix-php-code-style-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: ${{ github.head_ref || github.sha }}
fetch-depth: 0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/phpstan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
steps:

- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Setup PHP
uses: shivammathur/setup-php@v2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/run-plugin-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6

- name: Use Node.js
uses: actions/setup-node@v6
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Setup PHP
uses: shivammathur/setup-php@v2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update-changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: main

Expand Down
75 changes: 36 additions & 39 deletions resources/electron/electron-plugin/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { app, session, powerMonitor } from "electron";
import { initialize } from "@electron/remote/main/index.js";
import state from "./server/state.js";
import { electronApp, optimizer } from "@electron-toolkit/utils";
import { retrieveNativePHPConfig, retrievePhpIniSettings, runScheduler, killScheduler, startAPI, startPhpApp, } from "./server/index.js";
import { notifyLaravel } from "./server/utils.js";
import { resolve } from "path";
import { stopAllProcesses } from "./server/api/childProcess.js";
import ps from "ps-node";
import killSync from "kill-sync";
import { electronApp, optimizer } from '@electron-toolkit/utils';
import { initialize } from '@electron/remote/main/index.js';
import { app, powerMonitor, session } from 'electron';
import killSync from 'kill-sync';
import { resolve } from 'path';
import ps from 'ps-node';
import { stopAllProcesses } from './server/api/childProcess.js';
import { killScheduler, retrieveNativePHPConfig, retrievePhpIniSettings, runScheduler, startAPI, startPhpApp, } from './server/index.js';
import state from './server/state.js';
import { notifyLaravel } from './server/utils.js';
import electronUpdater from 'electron-updater';
const { autoUpdater } = electronUpdater;
class NativePHP {
Expand All @@ -35,36 +35,36 @@ class NativePHP {
this.addEventListeners(app);
}
addEventListeners(app) {
app.on("open-url", (event, url) => {
notifyLaravel("events", {
event: "\\Native\\Desktop\\Events\\App\\OpenedFromURL",
app.on('open-url', (event, url) => {
notifyLaravel('events', {
event: '\\Native\\Desktop\\Events\\App\\OpenedFromURL',
payload: [url],
});
});
app.on("open-file", (event, path) => {
notifyLaravel("events", {
event: "\\Native\\Desktop\\Events\\App\\OpenFile",
app.on('open-file', (event, path) => {
notifyLaravel('events', {
event: '\\Native\\Desktop\\Events\\App\\OpenFile',
payload: [path],
});
});
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on("before-quit", () => {
app.on('before-quit', () => {
if (this.schedulerInterval) {
clearInterval(this.schedulerInterval);
}
stopAllProcesses();
this.killChildProcesses();
});
app.on("browser-window-created", (_, window) => {
app.on('browser-window-created', (_, window) => {
optimizer.watchWindowShortcuts(window);
});
app.on("activate", function (event, hasVisibleWindows) {
app.on('activate', function (event, hasVisibleWindows) {
if (!hasVisibleWindows) {
notifyLaravel("booted");
notifyLaravel('booted');
}
event.preventDefault();
});
Expand All @@ -81,15 +81,15 @@ class NativePHP {
state.phpIni = yield this.loadPhpIni();
yield this.startPhpApp();
this.startScheduler();
powerMonitor.on("suspend", () => {
powerMonitor.on('suspend', () => {
this.stopScheduler();
});
powerMonitor.on("resume", () => {
powerMonitor.on('resume', () => {
this.stopScheduler();
this.startScheduler();
});
const filter = {
urls: [`http://127.0.0.1:${state.phpPort}/*`]
urls: [`http://127.0.0.1:${state.phpPort}/*`],
};
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
details.requestHeaders['X-NativePHP-Secret'] = state.randomSecret;
Expand All @@ -98,7 +98,7 @@ class NativePHP {
if (process.env.NATIVEPHP_NO_FOCUS) {
state.noFocusOnRestart = true;
}
yield notifyLaravel("booted");
yield notifyLaravel('booted');
});
}
loadConfig() {
Expand All @@ -115,8 +115,7 @@ class NativePHP {
});
}
setDockIcon() {
if (process.platform === "darwin" &&
process.env.NODE_ENV === "development") {
if (process.platform === 'darwin' && process.env.NODE_ENV === 'development') {
app.dock.setIcon(state.icon);
}
}
Expand All @@ -128,29 +127,27 @@ class NativePHP {
if (deepLinkProtocol) {
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient(deepLinkProtocol, process.execPath, [
resolve(process.argv[1]),
]);
app.setAsDefaultProtocolClient(deepLinkProtocol, process.execPath, [resolve(process.argv[1])]);
}
}
else {
app.setAsDefaultProtocolClient(deepLinkProtocol);
}
if (process.platform !== "darwin") {
if (process.platform !== 'darwin') {
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
return;
}
else {
app.on("second-instance", (event, commandLine, workingDirectory) => {
app.on('second-instance', (event, commandLine) => {
if (this.mainWindow) {
if (this.mainWindow.isMinimized())
this.mainWindow.restore();
this.mainWindow.focus();
}
notifyLaravel("events", {
event: "\\Native\\Desktop\\Events\\App\\OpenedFromURL",
notifyLaravel('events', {
event: '\\Native\\Desktop\\Events\\App\\OpenedFromURL',
payload: {
url: commandLine[commandLine.length - 1],
},
Expand All @@ -168,7 +165,7 @@ class NativePHP {
if (publicUrl) {
autoUpdater.setFeedURL({
provider: 'generic',
url: publicUrl
url: publicUrl,
});
}
autoUpdater.checkForUpdatesAndNotify();
Expand All @@ -178,7 +175,7 @@ class NativePHP {
return __awaiter(this, void 0, void 0, function* () {
const electronApi = yield startAPI();
state.electronApiPort = electronApi.port;
console.log("Electron API server started on port", electronApi.port);
console.log('Electron API server started on port', electronApi.port);
});
}
loadPhpIni() {
Expand Down Expand Up @@ -210,10 +207,10 @@ class NativePHP {
const now = new Date();
const delay = (60 - now.getSeconds()) * 1000 + (1000 - now.getMilliseconds());
setTimeout(() => {
console.log("Running scheduler...");
console.log('Running scheduler...');
runScheduler();
this.schedulerInterval = setInterval(() => {
console.log("Running scheduler...");
console.log('Running scheduler...');
runScheduler();
}, 60 * 1000);
}, delay);
Expand Down
28 changes: 12 additions & 16 deletions resources/electron/electron-plugin/dist/libs/menubar/Menubar.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { BrowserWindow, Tray } from 'electron';
import { EventEmitter } from 'events';
import fs from 'fs';
import path from 'path';
import { BrowserWindow, Tray } from 'electron';
import Positioner from '../positioner/index.js';
import { cleanOptions } from './util/cleanOptions.js';
import { getWindowPosition } from './util/getWindowPosition.js';
Expand Down Expand Up @@ -95,16 +95,11 @@ export class Menubar extends EventEmitter {
if ((trayPos === undefined || trayPos.x === 0) &&
this._options.windowPosition &&
this._options.windowPosition.startsWith('tray')) {
noBoundsPosition =
process.platform === 'win32' ? 'bottomRight' : 'topRight';
noBoundsPosition = process.platform === 'win32' ? 'bottomRight' : 'topRight';
}
const position = this.positioner.calculate(this._options.windowPosition || noBoundsPosition, trayPos);
const x = this._options.browserWindow.x !== undefined
? this._options.browserWindow.x
: position.x;
const y = this._options.browserWindow.y !== undefined
? this._options.browserWindow.y
: position.y;
const x = this._options.browserWindow.x !== undefined ? this._options.browserWindow.x : position.x;
const y = this._options.browserWindow.y !== undefined ? this._options.browserWindow.y : position.y;
this._browserWindow.setPosition(Math.round(x), Math.round(y));
this._browserWindow.show();
this._isVisible = true;
Expand All @@ -128,9 +123,7 @@ export class Menubar extends EventEmitter {
if (typeof trayImage === 'string' && !fs.existsSync(trayImage)) {
trayImage = path.join(__dirname, '..', 'assets', 'IconTemplate.png');
}
const defaultClickEvent = this._options.showOnRightClick
? 'right-click'
: 'click';
const defaultClickEvent = this._options.showOnRightClick ? 'right-click' : 'click';
this._tray = this._options.tray || new Tray(trayImage);
if (!this.tray) {
throw new Error('Tray has been initialized above');
Expand Down Expand Up @@ -175,11 +168,14 @@ export class Menubar extends EventEmitter {
if (!this._browserWindow) {
return;
}
this._browserWindow.isAlwaysOnTop()
? this.emit('focus-lost')
: (this._blurTimeout = setTimeout(() => {
if (this._browserWindow.isAlwaysOnTop()) {
this.emit('focus-lost');
}
else {
this._blurTimeout = setTimeout(() => {
this.hideWindow();
}, 100));
}, 100);
}
});
if (this._options.showOnAllWorkspaces !== false) {
this._browserWindow.setVisibleOnAllWorkspaces(true, {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { app } from 'electron';
import path from 'path';
import url from 'url';
import { app } from 'electron';
const DEFAULT_WINDOW_HEIGHT = 400;
const DEFAULT_WINDOW_WIDTH = 400;
export function cleanOptions(opts) {
Expand All @@ -27,12 +27,8 @@ export function cleanOptions(opts) {
options.browserWindow = {};
}
options.browserWindow.width =
options.browserWindow.width !== undefined
? options.browserWindow.width
: DEFAULT_WINDOW_WIDTH;
options.browserWindow.width !== undefined ? options.browserWindow.width : DEFAULT_WINDOW_WIDTH;
options.browserWindow.height =
options.browserWindow.height !== undefined
? options.browserWindow.height
: DEFAULT_WINDOW_HEIGHT;
options.browserWindow.height !== undefined ? options.browserWindow.height : DEFAULT_WINDOW_HEIGHT;
return options;
}
33 changes: 14 additions & 19 deletions resources/electron/electron-plugin/dist/libs/positioner/index.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
"use strict";
'use strict';
import { screen } from 'electron';
class Positioner {
constructor(browserWindow) {
this.browserWindow = browserWindow;
this.electronScreen = require("electron").screen;
this.electronScreen = screen;
}
_getCoords(position, trayPosition) {
let screenSize = this._getScreenSize(trayPosition);
let windowSize = this._getWindowSize();
const screenSize = this._getScreenSize(trayPosition);
const windowSize = this._getWindowSize();
if (trayPosition === undefined)
trayPosition = {};
let positions = {
const positions = {
trayLeft: {
x: Math.floor(trayPosition.x),
y: screenSize.y,
Expand Down Expand Up @@ -60,15 +61,11 @@ class Positioner {
},
leftCenter: {
x: screenSize.x,
y: screenSize.y +
Math.floor(screenSize.height / 2) -
Math.floor(windowSize[1] / 2),
y: screenSize.y + Math.floor(screenSize.height / 2) - Math.floor(windowSize[1] / 2),
},
rightCenter: {
x: Math.floor(screenSize.x + (screenSize.width - windowSize[0])),
y: screenSize.y +
Math.floor(screenSize.height / 2) -
Math.floor(windowSize[1] / 2),
y: screenSize.y + Math.floor(screenSize.height / 2) - Math.floor(windowSize[1] / 2),
},
center: {
x: Math.floor(screenSize.x + (screenSize.width / 2 - windowSize[0] / 2)),
Expand All @@ -79,11 +76,10 @@ class Positioner {
y: Math.floor(screenSize.y + (screenSize.height - windowSize[1]) / 3),
},
};
if (position.substr(0, 4) === "tray") {
if (positions[position].x + windowSize[0] >
screenSize.width + screenSize.x) {
if (position.substr(0, 4) === 'tray') {
if (positions[position].x + windowSize[0] > screenSize.width + screenSize.x) {
return {
x: positions["topRight"].x,
x: positions['topRight'].x,
y: positions[position].y,
};
}
Expand All @@ -95,19 +91,18 @@ class Positioner {
}
_getScreenSize(trayPosition) {
if (trayPosition) {
return this.electronScreen.getDisplayMatching(trayPosition)
.workArea;
return this.electronScreen.getDisplayMatching(trayPosition).workArea;
}
else {
return this.electronScreen.getDisplayNearestPoint(this.electronScreen.getCursorScreenPoint()).workArea;
}
}
move(position, trayPos) {
var coords = this._getCoords(position, trayPos);
const coords = this._getCoords(position, trayPos);
this.browserWindow.setPosition(coords.x, coords.y);
}
calculate(position, trayPos) {
var coords = this._getCoords(position, trayPos);
const coords = this._getCoords(position, trayPos);
return {
x: coords.x,
y: coords.y,
Expand Down
Loading