Add base files from AME
This commit is contained in:
parent
e8f3881513
commit
e3c3bded3a
129 changed files with 19056 additions and 0 deletions
238
resources/functions/load.js
Normal file
238
resources/functions/load.js
Normal file
|
@ -0,0 +1,238 @@
|
|||
const {join, resolve} = require("path"),
|
||||
{app, ipcMain, systemPreferences} = require("electron"),
|
||||
{readFile, constants, chmodSync, existsSync, watch} = require("fs"),
|
||||
{initAnalytics} = require('./utils');
|
||||
initAnalytics();
|
||||
|
||||
module.exports = {
|
||||
|
||||
LoadCSS: function (path, theme, important) {
|
||||
const fileName = path
|
||||
if (theme) {
|
||||
path = join(app.userThemesPath, path.toLowerCase());
|
||||
} else {
|
||||
path = join(join(__dirname, '../css/'), path)
|
||||
}
|
||||
|
||||
// Check that the file exists
|
||||
if (!existsSync(path)) {
|
||||
console.warn(`[LoadCSS] ${path} not found.`)
|
||||
return
|
||||
}
|
||||
|
||||
// Remove previous inject (If there is one)
|
||||
if (app.injectedCSS[path]) {
|
||||
app.win.webContents.removeInsertedCSS(app.injectedCSS[fileName]).then(r => { if (r) console.error(r); });
|
||||
}
|
||||
|
||||
// Get the CSS to inject
|
||||
readFile(path, "utf-8", function (error, data) {
|
||||
if (error) {
|
||||
console.error(`[LoadCSS] Error while injecting: '${path}' - ${error}`)
|
||||
try {
|
||||
chmodSync(path, constants.S_IRUSR | constants.S_IWUSR);
|
||||
} catch (err) {
|
||||
console.error(`[LoadCSS] ${err}`)
|
||||
}
|
||||
} else {
|
||||
let formattedData = data.replace(/\s{2,10}/g, ' ').trim();
|
||||
app.win.webContents.insertCSS(formattedData, {cssOrigin: (important ? 'user' : 'author')}).then((key) => {
|
||||
console.verbose(`[${theme ? 'LoadTheme' : 'LoadCSS'}] '${fileName}' successfully injected.`)
|
||||
app.injectedCSS[fileName] = key
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
LoadJS: function (path, formatting = true) {
|
||||
const fileName = path;
|
||||
path = join(join(__dirname, '../js/'), path)
|
||||
|
||||
readFile(path, "utf-8", function (error, data) {
|
||||
if (!error) {
|
||||
try {
|
||||
let formattedData = data
|
||||
if (formatting) {
|
||||
formattedData = data.replace(/\s{2,10}/g, ' ').trim();
|
||||
}
|
||||
app.win.webContents.executeJavaScript(formattedData).then(() => {
|
||||
console.verbose(`[LoadJSFile] '${fileName}' successfully injected.`)
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(`[LoadJSFile] Error while injecting: '${fileName}' - Error: ${err}`)
|
||||
}
|
||||
} else {
|
||||
console.error(`[LoadJSFile] Error while reading: '${fileName}' - Error: ${error}`)
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
LoadWebsite: function (win) {
|
||||
if (!win) return;
|
||||
|
||||
app.storefront = app.cfg.get('general.storefront');
|
||||
const urlBase = app.cfg.get('advanced.useBetaSite') ? 'https://beta.music.apple.com' : 'https://music.apple.com/' + app.cfg.get('general.storefront'),
|
||||
urlFallback = `https://music.apple.com/`;
|
||||
|
||||
ipcMain.once('userAuthorized', (e, args) => {
|
||||
app.isAuthorized = true
|
||||
console.log(`[LoadWebsite] User Authenticated. Setting page to: ${args}`)
|
||||
win.webContents.clearHistory()
|
||||
})
|
||||
|
||||
win.loadURL(urlBase).then(() => {
|
||||
app.ame.load.LoadJS('checkAuth.js')
|
||||
}).catch((err) => {
|
||||
win.loadURL(urlFallback).then(() => console.error(`[LoadWebsite] '${urlBase}' was unavailable, falling back to '${urlFallback}' | ${err}`))
|
||||
})
|
||||
},
|
||||
|
||||
LoadFiles: function () {
|
||||
app.ame.load.LoadJS('settingsPage.js');
|
||||
if (app.cfg.get('visual.removeAppleLogo')) {
|
||||
app.win.webContents.insertCSS(`
|
||||
@media only screen and (max-width: 483px) {
|
||||
.web-navigation__nav-list {
|
||||
margin-top: 50px;
|
||||
}
|
||||
}
|
||||
}
|
||||
`).catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
if (app.cfg.get('visual.useOperatingSystemAccent') && (process.platform === "win32" || process.platform === "darwin")) {
|
||||
if (systemPreferences.getAccentColor()) {
|
||||
const accent = '#' + systemPreferences.getAccentColor().slice(0, -2)
|
||||
app.win.webContents.insertCSS(`
|
||||
:root {
|
||||
--keyColor: ${accent} !important;
|
||||
--systemAccentBG: ${accent} !important;
|
||||
--systemAccentBG-pressed: rgba(${app.ame.utils.hexToRgb(accent).r}, ${app.ame.utils.hexToRgb(accent).g}, ${app.ame.utils.hexToRgb(accent).b}, 0.75) !important;
|
||||
--keyColor-rgb: ${app.ame.utils.hexToRgb(accent).r} ${app.ame.utils.hexToRgb(accent).g} ${app.ame.utils.hexToRgb(accent).b} !important;
|
||||
}`).then((key) => {
|
||||
app.injectedCSS['useOperatingSystemAccent'] = key
|
||||
})
|
||||
}
|
||||
} else {
|
||||
app.ame.win.removeInsertedCSS('useOperatingSystemAccent')
|
||||
}
|
||||
|
||||
/* Load Window Frame */
|
||||
if (app.cfg.get('visual.frameType') === 'mac') {
|
||||
app.ame.load.LoadJS('frame_macOS.js')
|
||||
} else if ((app.cfg.get('visual.frameType') === 'mac-right')) {
|
||||
app.ame.load.LoadJS('frame_Windows.js')
|
||||
} else if (process.platform === 'darwin' && !app.cfg.get('visual.frameType')) {
|
||||
app.ame.load.LoadJS('frame_macOS.js')
|
||||
} else if (process.platform === 'win32' && !app.cfg.get('visual.frameType')) {
|
||||
app.ame.load.LoadJS('frame_Windows.js')
|
||||
if (app.win.isMaximized()) {
|
||||
app.win.webContents.executeJavaScript(`if (document.querySelector("#maximize")) { document.querySelector("#maximize").classList.add("maxed"); }`).catch((e) => console.error(e));
|
||||
}
|
||||
}
|
||||
|
||||
const BackButtonChecks = (url) => {
|
||||
if (!app.win.webContents.canGoBack()) return false
|
||||
const backButtonBlacklist = [`*music.apple.com/*/listen-now*`, `*music.apple.com/*/browse*`, `*music.apple.com/*/radio*`, `*music.apple.com/*/search*`, `*music.apple.com/library/recently-added?l=*`, `*music.apple.com/library/albums?l=*`, `*music.apple.com/library/songs?l=*`, `*music.apple.com/library/made-for-you?l=*`, `*music.apple.com/library/recently-added`, `*music.apple.com/library/albums`, `*music.apple.com/library/made-for-you`, `*music.apple.com/library/songs*`, `*music.apple.com/library/artists/*`, `*music.apple.com/library/playlist/*`];
|
||||
let blacklistPassed = true
|
||||
backButtonBlacklist.forEach((item) => {
|
||||
if (!blacklistPassed) return;
|
||||
if (app.ame.utils.matchRuleShort(url, item) || url === item) {
|
||||
blacklistPassed = false
|
||||
}
|
||||
});
|
||||
return blacklistPassed
|
||||
}
|
||||
|
||||
/* Load Back Button */
|
||||
if (BackButtonChecks(app.win.webContents.getURL())) {
|
||||
app.ame.load.LoadJS('backButton.js')
|
||||
app.win.webContents.executeJavaScript(`document.body.setAttribute('back-button', 1)`)
|
||||
} else { /* Removes the button if the check failed. */
|
||||
app.win.webContents.executeJavaScript(`if (document.querySelector('#backButtonBar')) { document.getElementById('backButtonBar').remove() };`).catch((e) => console.error(e));
|
||||
app.win.webContents.executeJavaScript(`document.body.removeAttribute('back-button')`)
|
||||
}
|
||||
|
||||
/* Load the Startup JavaScript Function */
|
||||
app.win.webContents.executeJavaScript('if (AMJavaScript) { AMJavaScript.LoadCustom(); }').catch((e) => console.error(e));
|
||||
},
|
||||
|
||||
LoadOneTimeFiles: function () {
|
||||
// Inject the custom stylesheet
|
||||
app.ame.load.LoadCSS('custom-stylesheet.css')
|
||||
app.ame.load.LoadCSS('ameframework.css')
|
||||
|
||||
// Inject Plugin Interaction
|
||||
if (app.pluginsEnabled) {
|
||||
app.ame.load.LoadJS('pluginSystem.js', false)
|
||||
}
|
||||
// Load this first so it doesn't stuck
|
||||
app.ame.load.LoadJS('OpusMediaRecorder.umd.js')
|
||||
app.ame.load.LoadJS('encoderWorker.umd.js')
|
||||
|
||||
|
||||
// Lyrics
|
||||
app.ame.load.LoadJS('lyrics.js')
|
||||
|
||||
// Vue Test
|
||||
app.ame.load.LoadJS('vue.js')
|
||||
app.ame.load.LoadJS('utils.js', false)
|
||||
app.ame.load.LoadJS('tests.js', false)
|
||||
// wsapi
|
||||
app.ame.load.LoadJS('WSAPI_Interop.js', false)
|
||||
// wsapi
|
||||
|
||||
// Bulk JavaScript Functions
|
||||
app.ame.load.LoadJS('custom.js')
|
||||
|
||||
// Audio Manuipulation Stuff
|
||||
|
||||
app.ame.load.LoadJS('eq.js')
|
||||
|
||||
|
||||
// Window Frames
|
||||
if (app.cfg.get('visual.frameType') === 'mac') {
|
||||
app.ame.load.LoadCSS('frame_macOS_emulation.css')
|
||||
} else if (app.cfg.get('visual.frameType') === 'mac-right') {
|
||||
app.ame.load.LoadCSS('frame_macOS_emulation_right.css')
|
||||
} else if (process.platform === 'win32' && !app.cfg.get('visual.frameType')) {
|
||||
app.ame.load.LoadCSS('frame_Windows.css')
|
||||
}
|
||||
|
||||
// Set the settings variables if needed
|
||||
if (app.cfg.get('visual.frameType') === 'mac' || app.cfg.get('visual.frameType') === 'mac-right') {
|
||||
app.cfg.set('visual.removeUpsell', true);
|
||||
app.cfg.set('visual.removeAppleLogo', true);
|
||||
}
|
||||
|
||||
// Streamer Mode
|
||||
if (app.cfg.get('visual.streamerMode')) {
|
||||
app.ame.load.LoadCSS('streamerMode.css')
|
||||
}
|
||||
|
||||
/* Remove the Scrollbar */
|
||||
if (app.cfg.get('visual.removeScrollbars')) {
|
||||
app.win.webContents.insertCSS('::-webkit-scrollbar { display: none; }').then()
|
||||
} else {
|
||||
app.ame.load.LoadCSS('macosScrollbar.css')
|
||||
}
|
||||
|
||||
/* Inject the MusicKitInterop file */
|
||||
app.win.webContents.executeJavaScript('MusicKitInterop.init()').catch((e) => console.error(e));
|
||||
|
||||
/* Watches for changes to a theme */
|
||||
if (app.watcher) {
|
||||
app.watcher.close();
|
||||
console.verbose('[Watcher] Removed old watcher.')
|
||||
}
|
||||
|
||||
if (existsSync(resolve(app.getPath('userData'), 'themes', `${app.cfg.get('visual.theme')}.css`)) && app.cfg.get('visual.theme') !== "default" && app.cfg.get('visual.theme')) {
|
||||
app.watcher = watch(resolve(app.getPath('userData'), 'themes', `${app.cfg.get('visual.theme')}.css`), (event, fileName) => {
|
||||
if (event === "change" && fileName === `${app.cfg.get('visual.theme')}.css`) {
|
||||
app.win.webContents.executeJavaScript(`AMStyling.loadTheme("${app.cfg.get('visual.theme')}", true);`).catch((err) => console.error(err));
|
||||
}
|
||||
});
|
||||
console.verbose(`[Watcher] Watching for changes: 'themes/${app.cfg.get('visual.theme')}.css'`)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue