Upload files to "/"
This commit is contained in:
		
							parent
							
								
									aac3b23810
								
							
						
					
					
						commit
						ef09edb0cf
					
				
							
								
								
									
										22
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
    "env": {
 | 
			
		||||
        "browser": true,
 | 
			
		||||
        "es2021": true
 | 
			
		||||
    },
 | 
			
		||||
    "extends": "eslint:recommended",
 | 
			
		||||
    "parserOptions": {
 | 
			
		||||
        "ecmaVersion": 13,
 | 
			
		||||
        "sourceType": "module"
 | 
			
		||||
    },
 | 
			
		||||
    "globals": {
 | 
			
		||||
        "__dirname": true,
 | 
			
		||||
        "converse": true,
 | 
			
		||||
        "exports": true,
 | 
			
		||||
        "module": true,
 | 
			
		||||
        "process": true,
 | 
			
		||||
        "require": true,
 | 
			
		||||
    },
 | 
			
		||||
    "rules": {
 | 
			
		||||
        "prefer-const": "error",
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
node_modules
 | 
			
		||||
.DS_*
 | 
			
		||||
dist/
 | 
			
		||||
.idea/
 | 
			
		||||
							
								
								
									
										23
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>RS Desktop</title>
 | 
			
		||||
   <!-- <link rel="stylesheet" type="text/css" media="screen" href="node_modules/converse.js/dist/converse.min.css"> -->
 | 
			
		||||
   <!-- Custom css for the win!! -->
 | 
			
		||||
   <link rel="stylesheet" type="text/css" media="screen" href="resources/css/customcss/converse.min.css">
 | 
			
		||||
   <link rel="stylesheet" type="text/css" href="resources/css/app.css">
 | 
			
		||||
</head>
 | 
			
		||||
<base href="./index.html">
 | 
			
		||||
<body class="converse-fullscreen">
 | 
			
		||||
    <div class="main-window">
 | 
			
		||||
        <div class="page-default">
 | 
			
		||||
            <div id="conversejs-bg"></div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- Place libsignal at libs dir as it's not distributed with converse.js anymore -->
 | 
			
		||||
    <script src="./3rdparty/libsignal-protocol.cjs"></script>
 | 
			
		||||
    <script src="./node_modules/converse.js/dist/converse.min.js"></script>
 | 
			
		||||
    <script type="module" src="./setup.js"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										161
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,161 @@
 | 
			
		||||
import { app, BrowserWindow, ipcMain, shell, powerMonitor } from 'electron';
 | 
			
		||||
import path from 'path';
 | 
			
		||||
import { fileURLToPath } from 'url';
 | 
			
		||||
import keytar from 'keytar';
 | 
			
		||||
 | 
			
		||||
import trayService from './modules/tray-service.js';
 | 
			
		||||
import menuService from './modules/menu-service.js';
 | 
			
		||||
import settingsService from './modules/settings-service.js';
 | 
			
		||||
import setFindBar from "find-bar" // search bar
 | 
			
		||||
 | 
			
		||||
const __filename = fileURLToPath(import.meta.url);
 | 
			
		||||
const __dirname = path.dirname(__filename);
 | 
			
		||||
 | 
			
		||||
export let mainWindow;
 | 
			
		||||
let zoom = 1;
 | 
			
		||||
 | 
			
		||||
const isMac = process.platform === 'darwin';
 | 
			
		||||
const isWin = process.platform === 'win32';
 | 
			
		||||
 | 
			
		||||
function initApp() {
 | 
			
		||||
    if (!app.requestSingleInstanceLock()) {
 | 
			
		||||
        app.quit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    createWindow();
 | 
			
		||||
 | 
			
		||||
    if (isWin) {
 | 
			
		||||
        app.setAppUserModelId("com.rscommunity.rs-desktop");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function createWindow() {
 | 
			
		||||
    const getSavedWindowBounds = () => {
 | 
			
		||||
        const winBounds = settingsService.get('winBounds') || { width: 800, height: 600, x: undefined, y: undefined };        winBounds.width = Math.max(winBounds.width, 200);
 | 
			
		||||
        winBounds.height = Math.max(winBounds.height, 200);
 | 
			
		||||
        return winBounds;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const mainWindowOptions = {
 | 
			
		||||
        zoomToPageWidth: true,
 | 
			
		||||
        show: false,
 | 
			
		||||
        autoHideMenuBar: settingsService.get('hideMenubar') || false,
 | 
			
		||||
        webPreferences: {
 | 
			
		||||
            nodeIntegration: true,
 | 
			
		||||
            preload: path.join(__dirname, 'preload.cjs'), // this is a commonjs file, because electron doesnt support natively loading esm in preload files, which is retarded, but i cant change that.. so we will just cope :p
 | 
			
		||||
        },
 | 
			
		||||
        icon: path.join(__dirname, 'resources', 'images', 'logo-48x48.png'),
 | 
			
		||||
        ...getSavedWindowBounds(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    mainWindow = new BrowserWindow(mainWindowOptions);
 | 
			
		||||
 | 
			
		||||
    trayService.initTray(mainWindow);
 | 
			
		||||
    menuService.createMenu(mainWindow);
 | 
			
		||||
 | 
			
		||||
    mainWindow.on('close', (e) => {
 | 
			
		||||
        settingsService.set('isMaximized', mainWindow.isMaximized());
 | 
			
		||||
        if (mainWindow.isFullScreen()) {
 | 
			
		||||
            mainWindow.setFullScreen(false);
 | 
			
		||||
        }
 | 
			
		||||
        if (!app.isQuitting && settingsService.get('minimizeOnClose')) {
 | 
			
		||||
            e.preventDefault();
 | 
			
		||||
            mainWindow.hide();
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainWindow.on('resized', () => {
 | 
			
		||||
        settingsService.set('winBounds', mainWindow.getBounds());
 | 
			
		||||
    });
 | 
			
		||||
    mainWindow.on('moved', () => {
 | 
			
		||||
        settingsService.set('winBounds', mainWindow.getBounds());
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (isMac) {
 | 
			
		||||
        powerMonitor.on('shutdown', () => {
 | 
			
		||||
            app.isQuitting = true;
 | 
			
		||||
            app.quit();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ipcMain.on('app-quit', () => {
 | 
			
		||||
        app.isQuitting = true;
 | 
			
		||||
        app.quit();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    ipcMain.on('increaseZoom', () => { // custom zoom for the client
 | 
			
		||||
        if (zoom >= 2) return;
 | 
			
		||||
        zoom += 0.1;
 | 
			
		||||
        mainWindow.webContents.setZoomFactor(zoom);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    ipcMain.on('decreaseZoom', () => {
 | 
			
		||||
        if (zoom <= 0.5) return;
 | 
			
		||||
        zoom -= 0.1;
 | 
			
		||||
        mainWindow.webContents.setZoomFactor(zoom);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainWindow.webContents.setZoomFactor(1);
 | 
			
		||||
 | 
			
		||||
    mainWindow.on('closed', () => {
 | 
			
		||||
        mainWindow = null;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainWindow.webContents.setWindowOpenHandler((details) => {
 | 
			
		||||
        shell.openExternal(details.url).catch(console.log);
 | 
			
		||||
        return { action: 'deny' };
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    settingsService.webContents = mainWindow.webContents;
 | 
			
		||||
 | 
			
		||||
    ipcMain.handle('settings', (e, method, ...args) => {
 | 
			
		||||
        return settingsService[method].apply(settingsService, args);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    ipcMain.handle('trayService', (e, method, ...args) => {
 | 
			
		||||
        return trayService[method].apply(trayService, args);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    ipcMain.handle('keytar', (e, method, ...args) => {
 | 
			
		||||
        return keytar[method].apply(keytar, args);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainWindow.on('ready-to-show', () => {
 | 
			
		||||
        if (settingsService.get('isMaximized')) {
 | 
			
		||||
            mainWindow.maximize();
 | 
			
		||||
        } else {
 | 
			
		||||
            mainWindow.show();
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainWindow.loadFile('index.html').catch((err) => {
 | 
			
		||||
        console.log(err);
 | 
			
		||||
        app.isQuitting = true;
 | 
			
		||||
        app.quit();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
app.on('ready', initApp);
 | 
			
		||||
 | 
			
		||||
app.on('browser-window-created', (_, win) => {
 | 
			
		||||
    setFindBar(win); // search bar
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
app.on('window-all-closed', () => {
 | 
			
		||||
    app.quit();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.on('activate', () => {
 | 
			
		||||
    if (mainWindow === null) {
 | 
			
		||||
        createWindow();
 | 
			
		||||
    } else {
 | 
			
		||||
        mainWindow.show();
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.on('second-instance', () => {
 | 
			
		||||
    mainWindow.show();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
 | 
			
		||||
		Reference in New Issue
	
	Block a user