This commit is contained in:
vapormusic 2022-01-11 11:57:36 +07:00
commit 09ea07038f
2 changed files with 42 additions and 19 deletions

View file

@ -33,8 +33,10 @@
"express": "^4.17.2", "express": "^4.17.2",
"get-port": "^5.1.1", "get-port": "^5.1.1",
"lastfmapi": "^0.1.1", "lastfmapi": "^0.1.1",
"mdns": "^2.7.2",
"mpris-service": "^2.1.2", "mpris-service": "^2.1.2",
"music-metadata": "^7.11.4", "music-metadata": "^7.11.4",
"qrcode-terminal": "^0.12.0",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"source-map-support": "^0.5.21", "source-map-support": "^0.5.21",

View file

@ -12,6 +12,8 @@ const { writeFile, writeFileSync, existsSync, mkdirSync } = require('fs');
const fs = require('fs'); const fs = require('fs');
const mpris = require('./mpris'); const mpris = require('./mpris');
const mm = require('music-metadata'); const mm = require('music-metadata');
const mdns = require('mdns')
const qrcode = require('qrcode-terminal')
const fetch = require('electron-fetch').default; const fetch = require('electron-fetch').default;
const { Stream } = require('stream'); const { Stream } = require('stream');
@ -30,7 +32,7 @@ const CiderBase = {
clientPort: 0, clientPort: 0,
CreateBrowserWindow() { CreateBrowserWindow() {
this.VerifyFiles() this.VerifyFiles()
// Set default window sizes // Set default window sizes
const mainWindowState = windowStateKeeper({ const mainWindowState = windowStateKeeper({
defaultWidth: 1024, defaultWidth: 1024,
defaultHeight: 600 defaultHeight: 600
@ -84,8 +86,7 @@ const CiderBase = {
} }
// intercept "https://js-cdn.music.apple.com/hls.js/2.141.0/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead // intercept "https://js-cdn.music.apple.com/hls.js/2.141.0/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead
win.webContents.session.webRequest.onBeforeRequest( win.webContents.session.webRequest.onBeforeRequest({
{
urls: ["https://*/*.js"] urls: ["https://*/*.js"]
}, },
(details, callback) => { (details, callback) => {
@ -101,7 +102,7 @@ const CiderBase = {
} }
) )
win.webContents.session.webRequest.onBeforeSendHeaders(async (details, callback) => { win.webContents.session.webRequest.onBeforeSendHeaders(async(details, callback) => {
if (details.url === "https://buy.itunes.apple.com/account/web/info") { if (details.url === "https://buy.itunes.apple.com/account/web/info") {
details.requestHeaders['sec-fetch-site'] = 'same-site'; details.requestHeaders['sec-fetch-site'] = 'same-site';
details.requestHeaders['DNT'] = '1'; details.requestHeaders['DNT'] = '1';
@ -184,7 +185,7 @@ const CiderBase = {
event.returnValue = JSON.parse(libraryRecentlyAdded) event.returnValue = JSON.parse(libraryRecentlyAdded)
}) })
ipcMain.handle('getYTLyrics', async (event, track, artist) => { ipcMain.handle('getYTLyrics', async(event, track, artist) => {
var u = track + " " + artist + " official video"; var u = track + " " + artist + " official video";
const videos = await yt.search(u); const videos = await yt.search(u);
return videos return videos
@ -222,7 +223,7 @@ const CiderBase = {
win.minimize(); win.minimize();
}) })
ipcMain.on('setFullScreen',(event, flag) => { ipcMain.on('setFullScreen', (event, flag) => {
win.setFullScreen(flag) win.setFullScreen(flag)
}) })
@ -259,8 +260,7 @@ const CiderBase = {
if (url.includes("apple") || url.includes("localhost")) { if (url.includes("apple") || url.includes("localhost")) {
return { action: "allow" } return { action: "allow" }
} }
shell.openExternal(url).catch(() => { shell.openExternal(url).catch(() => {})
})
return { return {
action: 'deny' action: 'deny'
} }
@ -276,7 +276,7 @@ const CiderBase = {
mpris.connect(win) mpris.connect(win)
lastfm.authenticate() lastfm.authenticate()
// Discord // Discord
discord.connect((app.cfg.get("general.discord_rpc") == 1) ? '911790844204437504' : '886578863147192350'); discord.connect((app.cfg.get("general.discord_rpc") == 1) ? '911790844204437504' : '886578863147192350');
ipcMain.on('playbackStateDidChange', (_event, a) => { ipcMain.on('playbackStateDidChange', (_event, a) => {
app.media = a; app.media = a;
@ -297,7 +297,7 @@ const CiderBase = {
ipcMain.on("getPreviewURL", (_event, url) => { ipcMain.on("getPreviewURL", (_event, url) => {
fetch(url) fetch(url)
.then(res => res.buffer()) .then(res => res.buffer())
.then(async (buffer) => { .then(async(buffer) => {
try { try {
const metadata = await mm.parseBuffer(buffer, 'audio/x-m4a'); const metadata = await mm.parseBuffer(buffer, 'audio/x-m4a');
SoundCheckTag = metadata.native.iTunes[1].value SoundCheckTag = metadata.native.iTunes[1].value
@ -308,7 +308,7 @@ const CiderBase = {
}) })
}); });
ipcMain.on('writeAudio', function (event, buffer) { ipcMain.on('writeAudio', function(event, buffer) {
CiderBase.audiostream.write(Buffer.from(buffer)); CiderBase.audiostream.write(Buffer.from(buffer));
}) })
@ -374,20 +374,41 @@ const CiderBase = {
const webRemotePath = path.join(__dirname, '../renderer/'); const webRemotePath = path.join(__dirname, '../renderer/');
webapp.set("views", path.join(webRemotePath, "views")); webapp.set("views", path.join(webRemotePath, "views"));
webapp.set("view engine", "ejs"); webapp.set("view engine", "ejs");
let firstRequest = true
webapp.use(function (req, res, next) { //const webRemoteMDNS = mdns.createAdvertisement(mdns.tcp('https'), 9000, { name: "cider", domain: 'local' })
//webRemoteMDNS.start()
//* Prep for remote -quack
webapp.use(function(req, res, next) {
// if not localhost // if not localhost
if (req.url.includes("audio.webm") || (req.headers.host.includes("localhost") && req.headers["user-agent"].includes("Cider"))) { if (req.url.includes("audio.webm") || (req.headers.host.includes("localhost") && req.headers["user-agent"].includes("Cider"))) {
next(); next();
} else {
console.log(req.get('host'))
res.redirect("https://discord.gg/applemusic")
} }
}); });
webapp.use(express.static(webRemotePath)); webapp.use(express.static(webRemotePath));
webapp.get('/', function (req, res) { webapp.get('/', function(req, res) {
//if (!req.headers["user-agent"].includes("Cider"))
//res.sendFile(path.join(webRemotePath, 'index_old.html')); //res.sendFile(path.join(webRemotePath, 'index_old.html'));
if (firstRequest) {
console.log("---- Ignore Me ;) ---")
qrcode.generate(`http://${os.hostname}:9000`) //Prep for remote
console.log("---- Ignore Me ;) ---")
/*
*
* USING https://www.npmjs.com/package/qrcode-terminal for terminal
* WE SHOULD USE https://www.npmjs.com/package/qrcode for the remote (or others)
* -quack
*/
}
firstRequest = false
res.render("main", CiderBase.EnvironmentVariables) res.render("main", CiderBase.EnvironmentVariables)
}); });
webapp.get('/audio.webm', function (req, res) { webapp.get('/audio.webm', function(req, res) {
console.log('hi')
try { try {
req.connection.setTimeout(Number.MAX_SAFE_INTEGER); req.connection.setTimeout(Number.MAX_SAFE_INTEGER);
// CiderBase.requests.push({req: req, res: res}); // CiderBase.requests.push({req: req, res: res});
@ -406,11 +427,11 @@ const CiderBase = {
}) })
} catch (ex) { console.log(ex) } } catch (ex) { console.log(ex) }
}); });
webapp.listen(CiderBase.clientPort, function () { webapp.listen(CiderBase.clientPort, function() {
console.log(`Cider client port: ${CiderBase.clientPort}`); console.log(`Cider hosted on: ${CiderBase.clientPort}`);
}); });
}, },
} }
module.exports = CiderBase; module.exports = CiderBase;