[ThemeSync] Initial Add
This commit is contained in:
parent
6220210ef5
commit
c912709688
6 changed files with 72 additions and 11 deletions
|
@ -29,10 +29,11 @@ OpenAsar is highly stable, but still likely has a few possible minor issues. Cra
|
||||||
## Config
|
## Config
|
||||||
You can configure OpenAsar via `settings.json` (found in your Discord app data / user data), under a `openasar` object. Keep in mind most options are defaults for good reason. The avaliable options are:
|
You can configure OpenAsar via `settings.json` (found in your Discord app data / user data), under a `openasar` object. Keep in mind most options are defaults for good reason. The avaliable options are:
|
||||||
- `quickstart` (bool, default false) - whether to use Quickstart (experimental)
|
- `quickstart` (bool, default false) - whether to use Quickstart (experimental)
|
||||||
- `skipStartupUpdateChecks` (bool, default false) - skips startup update checking (Linux-only)
|
- `themeSync` (bool, default true) - syncs your modded client's theme with splash theming
|
||||||
- `autoupdate` (bool, default true) - whether to autoupdate OpenAsar after Discord startup
|
- `autoupdate` (bool, default true) - whether to autoupdate OpenAsar after Discord startup
|
||||||
- `multiInstance` (bool, default false) - whether to enable multi-instance
|
- `multiInstance` (bool, default false) - whether to enable multi-instance
|
||||||
- `ssoeAllowlist` (bool, default true) - whether to use safer custom method of opening external urls (true) or normal Discord's method (false)
|
- `ssoeAllowlist` (bool, default true) - whether to use safer custom method of opening external urls (true) or normal Discord's method (false)
|
||||||
|
- `skipStartupUpdateChecks` (bool, default false) - skips startup update checking (Linux-only)
|
||||||
|
|
||||||
An example of a settings.json with OpenAsar config:
|
An example of a settings.json with OpenAsar config:
|
||||||
```json
|
```json
|
||||||
|
|
22
src/bootstrap.js
vendored
22
src/bootstrap.js
vendored
|
@ -1,4 +1,6 @@
|
||||||
const { app } = require('electron');
|
const { app, BrowserWindow } = require('electron');
|
||||||
|
const { readFileSync } = require('fs');
|
||||||
|
const { join } = require('path');
|
||||||
|
|
||||||
log('Bootstrap', 'Forcing Electron props');
|
log('Bootstrap', 'Forcing Electron props');
|
||||||
app.name = 'discord'; // Force name as sometimes breaks data path even with "discord" name (also fixes kernel?)
|
app.name = 'discord'; // Force name as sometimes breaks data path even with "discord" name (also fixes kernel?)
|
||||||
|
@ -59,6 +61,24 @@ const startCore = () => {
|
||||||
updater,
|
updater,
|
||||||
crashReporterSetup
|
crashReporterSetup
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const i = setImmediate(() => {
|
||||||
|
log('MainWindowInject', 'Attempting to get main window');
|
||||||
|
|
||||||
|
if (!global.mainWindowId) return;
|
||||||
|
|
||||||
|
log('MainWindowInject', 'Success, adding dom-ready handler');
|
||||||
|
|
||||||
|
clearInterval(i);
|
||||||
|
|
||||||
|
const bw = BrowserWindow.fromId(global.mainWindowId);
|
||||||
|
|
||||||
|
bw.webContents.on('dom-ready', () => {
|
||||||
|
log('MainWindowInject', 'dom-ready triggered, injecting JS');
|
||||||
|
|
||||||
|
bw.webContents.executeJavaScript(readFileSync(join(__dirname, 'mainWindowInject.js'), 'utf8'));
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const startUpdate = () => {
|
const startUpdate = () => {
|
||||||
|
|
14
src/mainWindowInject.js
Normal file
14
src/mainWindowInject.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
const update = async () => {
|
||||||
|
const getVar = (name, el = document.body) => el && (getComputedStyle(el).getPropertyValue(name) || getVar(name, el.parentElement)).trim();
|
||||||
|
const vars = [ '--background-primary', '--background-secondary', '--brand-experiment', '--header-primary', '--text-muted' ];
|
||||||
|
|
||||||
|
let cached = await DiscordNative.userDataCache.getCached() || {};
|
||||||
|
|
||||||
|
const value = `.theme-dark {${vars.reduce((acc, x) => acc += `${x}: ${getVar(x)}; `, '')}}`;
|
||||||
|
|
||||||
|
cached['openasarSplashCSS'] = value;
|
||||||
|
|
||||||
|
DiscordNative.userDataCache.cacheUserData(JSON.stringify(cached));
|
||||||
|
};
|
||||||
|
|
||||||
|
setInterval(update, 5000);
|
|
@ -8,6 +8,14 @@
|
||||||
<div id="debug"></div>
|
<div id="debug"></div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
:root {
|
||||||
|
--background-primary: #282b30;
|
||||||
|
--background-secondary: rgba(255, 255, 255, 0.1);
|
||||||
|
--brand-experiment: #5865F2;
|
||||||
|
--header-primary: #fff;
|
||||||
|
--text-muted: #72767d;
|
||||||
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: Whitney;
|
font-family: Whitney;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
@ -24,7 +32,7 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
background: #282b30;
|
background: var(--background-primary);
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -50,7 +58,7 @@
|
||||||
font-size: 7vw;
|
font-size: 7vw;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
color: #fff;
|
color: var(--header-primary);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -74,11 +82,11 @@
|
||||||
|
|
||||||
#bar-container {
|
#bar-container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: var(--background-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
#bar-fill {
|
#bar-fill {
|
||||||
background-color: #737f8d;
|
background-color: var(--brand-experiment);
|
||||||
width: 0;
|
width: 0;
|
||||||
|
|
||||||
transform: translate(0%, -50%);
|
transform: translate(0%, -50%);
|
||||||
|
@ -92,7 +100,7 @@
|
||||||
|
|
||||||
text-align: right;
|
text-align: right;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
color: #72767d;
|
color: var(--text-muted);
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -122,4 +130,12 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
document.querySelector('#debug').textContent = DiscordSplash.getDebugInfo();
|
document.querySelector('#debug').textContent = DiscordSplash.getDebugInfo();
|
||||||
|
|
||||||
|
DiscordSplash.getCSS((css) => {
|
||||||
|
document.body.classList.add('theme-dark'); // Theme compat
|
||||||
|
|
||||||
|
const cssInject = document.createElement('style');
|
||||||
|
cssInject.appendChild(document.createTextNode(css));
|
||||||
|
document.body.appendChild(cssInject);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
|
@ -2,6 +2,8 @@ const { app, contextBridge, ipcRenderer } = require('electron');
|
||||||
|
|
||||||
const { saferShellOpenExternal } = require('../utils/securityUtils');
|
const { saferShellOpenExternal } = require('../utils/securityUtils');
|
||||||
|
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
|
||||||
|
|
||||||
contextBridge.exposeInMainWorld('DiscordSplash', {
|
contextBridge.exposeInMainWorld('DiscordSplash', {
|
||||||
signalReady: () => {
|
signalReady: () => {
|
||||||
|
@ -20,9 +22,11 @@ contextBridge.exposeInMainWorld('DiscordSplash', {
|
||||||
getDebugInfo: () => {
|
getDebugInfo: () => {
|
||||||
const buildInfo = require('../utils/buildInfo');
|
const buildInfo = require('../utils/buildInfo');
|
||||||
|
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
|
||||||
|
|
||||||
return `${buildInfo.releaseChannel} ${buildInfo.version}
|
return `${buildInfo.releaseChannel} ${buildInfo.version}
|
||||||
OpenAsar ${urlParams.get('oaVersion')}`;
|
OpenAsar ${urlParams.get('oaVersion')}`;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
getCSS: callback => urlParams.get('oaThemeSync') !== 'false' ? ipcRenderer.on('DISCORD_GET_CSS', (_, value) => {
|
||||||
|
callback(value);
|
||||||
|
}) : {}
|
||||||
});
|
});
|
|
@ -487,7 +487,13 @@ function launchSplashWindow(startMinimized) {
|
||||||
pathname: _path.default.join(__dirname, 'index.html')
|
pathname: _path.default.join(__dirname, 'index.html')
|
||||||
});
|
});
|
||||||
|
|
||||||
splashWindow.loadURL(splashUrl + '?oaVersion=' + global.oaVersion);
|
try {
|
||||||
|
webContentsSend(splashWindow, 'GET_CSS', JSON.parse(_fs.default.readFileSync(_path.default.join(paths.getUserData(), 'userDataCache.json'), 'utf8')).openasarSplashCSS);
|
||||||
|
} catch (e) {
|
||||||
|
log('Splash', 'Failed to inject splash CSS');
|
||||||
|
}
|
||||||
|
|
||||||
|
splashWindow.loadURL(splashUrl + '?oaVersion=' + global.oaVersion + '&oaThemeSync=' + oaConfig.themeSync);
|
||||||
|
|
||||||
log('Splash', `Loading window (with url ${splashUrl})`);
|
log('Splash', `Loading window (with url ${splashUrl})`);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue