FIX: clean my own mess

This commit is contained in:
Julien Maille 2026-02-10 12:02:26 +01:00
parent 37b0747e05
commit 2c165d7148
8 changed files with 50 additions and 30 deletions

View file

@ -50,7 +50,7 @@ jobs:
run: npx neu update run: npx neu update
- name: Build application - name: Build application
run: npm run build run: npm run build:desktop
- name: Prepare Release - name: Prepare Release
run: | run: |

BIN
.gitignore vendored

Binary file not shown.

View file

@ -4324,6 +4324,7 @@
</footer> </footer>
</div> </div>
<script src="https://cdn.jsdelivr.net/npm/pocketbase@0.21.3/dist/pocketbase.umd.js"></script> <script src="https://cdn.jsdelivr.net/npm/pocketbase@0.21.3/dist/pocketbase.umd.js"></script>
<script src="/neutralino.js"></script>
<script type="module" src="/js/app.js"></script> <script type="module" src="/js/app.js"></script>
</body> </body>
</html> </html>

View file

@ -1,4 +1,5 @@
//js/app.js //js/app.js
console.log('[App] Script loaded');
import { LosslessAPI } from './api.js'; import { LosslessAPI } from './api.js';
import { import {
apiSettings, apiSettings,
@ -25,7 +26,7 @@ import * as Neutralino from '@neutralinojs/lib';
import './smooth-scrolling.js'; import './smooth-scrolling.js';
// Assign Neutralino to window for global access // Assign Neutralino to window for global access
if (typeof window !== 'undefined') { if (typeof window !== 'undefined' && window.NL_MODE) {
window.Neutralino = Neutralino; window.Neutralino = Neutralino;
} }
@ -237,6 +238,31 @@ async function disablePwaForAuthGate() {
} }
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
// Initialize desktop environment (Neutralino)
const isDesktop = typeof window !== 'undefined' && (window.NL_MODE || window.location.port === '5050');
if (typeof window !== 'undefined' && window.Neutralino) {
console.log('[App] Neutralino object detected. Environment:', isDesktop ? 'Desktop' : 'Web');
if (isDesktop) {
console.log('[App] Initializing Neutralino desktop environment...');
try {
Neutralino.init();
console.log('[App] Neutralino.init() called successfully.');
// Register events immediately
Neutralino.events.on('windowClose', () => {
console.log('[App] Window close event triggered.');
Neutralino.app.exit();
});
} catch (error) {
console.error('[App] Failed to initialize desktop environment:', error);
}
} else {
console.log('[App] Skipping Neutralino.init() on regular web environment.');
}
} else {
console.log('[App] Neutralino object NOT detected.');
}
const api = new LosslessAPI(apiSettings); const api = new LosslessAPI(apiSettings);
const audioPlayer = document.getElementById('audio-player'); const audioPlayer = document.getElementById('audio-player');
@ -385,22 +411,9 @@ document.addEventListener('DOMContentLoaded', async () => {
// Initialize tracker // Initialize tracker
initTracker(player); initTracker(player);
// Initialize desktop environment (Neutralino) if (typeof window !== 'undefined' && window.Neutralino && (window.NL_MODE || window.location.port === '5050')) {
if (window.Neutralino) { console.log('[App] Starting Discord RPC...');
console.log('Initializing Neutralino desktop environment (Lite Mode)...');
try {
Neutralino.init();
// Register events immediately
Neutralino.events.on('windowClose', () => {
Neutralino.app.exit();
});
// Start RPC immediately after init
initializeDiscordRPC(player); initializeDiscordRPC(player);
} catch (error) {
console.error('Failed to initialize desktop environment:', error);
}
} }
const castBtn = document.getElementById('cast-btn'); const castBtn = document.getElementById('cast-btn');

View file

@ -42,6 +42,7 @@ export function initializeDiscordRPC(player) {
if (player.currentTrack) { if (player.currentTrack) {
sendUpdate(player.currentTrack, player.audio.paused); sendUpdate(player.currentTrack, player.audio.paused);
} else { } else {
console.log('[DiscordRPC] Sending idling heartbeat...');
const idlingData = { const idlingData = {
details: 'Idling', details: 'Idling',
state: 'Monochrome', state: 'Monochrome',

View file

@ -6,7 +6,8 @@
"main": "sw.js", "main": "sw.js",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build && npx neu build", "build": "vite build",
"build:desktop": "vite build --mode neutralino && npx neu build && node -e \"const fs = require('fs'); fs.cpSync('extensions', 'dist/Monochrome/extensions', {recursive: true}); fs.copyFileSync('neutralino.config.json', 'dist/Monochrome/neutralino.config.json')\"",
"preview": "vite preview", "preview": "vite preview",
"start": "vite preview", "start": "vite preview",
"lint:js": "eslint .", "lint:js": "eslint .",

View file

@ -3,14 +3,17 @@ import { VitePWA } from 'vite-plugin-pwa';
import neutralino from 'vite-plugin-neutralino'; import neutralino from 'vite-plugin-neutralino';
import authGatePlugin from './vite-plugin-auth-gate.js'; import authGatePlugin from './vite-plugin-auth-gate.js';
export default defineConfig({ export default defineConfig(({ mode }) => {
const IS_NEUTRALINO = mode === 'neutralino';
return {
base: './', base: './',
build: { build: {
outDir: 'www', outDir: IS_NEUTRALINO ? 'www' : 'dist',
emptyOutDir: true, emptyOutDir: IS_NEUTRALINO,
}, },
plugins: [ plugins: [
neutralino(), IS_NEUTRALINO && neutralino(),
authGatePlugin(), authGatePlugin(),
VitePWA({ VitePWA({
registerType: 'prompt', registerType: 'prompt',
@ -49,4 +52,5 @@ export default defineConfig({
manifest: false, // Use existing public/manifest.json manifest: false, // Use existing public/manifest.json
}), }),
], ],
};
}); });