Initial commit

This commit is contained in:
2026-06-24 13:07:52 +02:00
commit bea7289c00
19 changed files with 6349 additions and 0 deletions
+114
View File
@@ -0,0 +1,114 @@
/*
! /startup/screen/init.js Splash Screen Initialization Module
? This module will initialize the startup loading screen
*/
module.exports = async () => {
// % load node dependencies
const { app, BrowserWindow, Menu } = require('electron');
const path = require('path');
// % splash screen variables
let splashWin; // reference to the splash screen window
let isReady = false; // initial ready state
let pendingUpdate = null; // initial pending update state
let animationInterval = null; // initial animation interval null
// $ create window function
const createWindow = () => {
// ~ initialize browser window
splashWin = new BrowserWindow({
title: "LupiNex Broadcast Studio",
// § window measures
width: 600,
height: 300,
// § window settings
frame: false,
transparent: true,
alwaysOnTop: true,
closable: false,
show: false,
// § window webprefs
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true
}
});
// ~ check if window is ready to be displayed
splashWin.once('ready-to-show', () => {
splashWin.show(); // show the splash screen
isReady = true; // set ready state to true
if (pendingUpdate) updateWindow(pendingUpdate.progress, pendingUpdate.message); // execute a pending update
});
// ~ ignore mouse events
splashWin.setIgnoreMouseEvents(true);
// ~ remove application menu
Menu.setApplicationMenu(null);
// ~ load html file
splashWin.loadFile(path.join(__dirname, 'index.html'));
// ~ return window reference
return splashWin;
};
// $ update window function
const updateWindow = (progress, message, isStatic = false) => {
// ~ stop running intervals if applicable
if (animationInterval) clearInterval(animationInterval);
// ~ create dot animation if not static
if (!isStatic) {
let dots = 0; // initial dot count
// § create interval
animationInterval = setInterval(() => {
dots = (dots + 1) % 4; // calculate dot count
const animatedMessage = message + ".".repeat(dots); // add dots to message
sendToWebContents(progress, animatedMessage); // execute update function
}, 750);
}
// ~ send status immediately
sendToWebContents(progress, message);
};
// ~ helper function to send update data
const sendToWebContents = (progress, message) => {
// § wait if electron is not ready
if (!isReady) {
pendingUpdate = { progress, message };
return;
}
// § send message to electron ipc
if (splashWin && !splashWin.isDestroyed()) {
splashWin.webContents.send('update-splash', {
...(progress !== null && { progress }),
message
});
}
};
// $ close window function
const closeWindow = () => {
if (splashWin && !splashWin.isDestroyed()) splashWin.close();
};
// $ electron lifecycle
app.whenReady().then(() => { createWindow() });
// $ return window functions
return {
update: updateWindow,
close: closeWindow
};
};