mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-09-10 13:54:41 +02:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
ebdae6bc88 | |||
|
ab25bf16b2 | ||
31670d0c2b |
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## 2.1.0
|
||||||
|
|
||||||
|
- [Mar0xy](https://github.com/Mar0xy) added Discord integration.
|
||||||
|
- Several versions have been bumped to fix vulnerabilities
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
### Breaking changes
|
### Breaking changes
|
||||||
|
@@ -13,7 +13,7 @@ pkgbase = tidal-hifi-git
|
|||||||
provides = tidal-hifi
|
provides = tidal-hifi
|
||||||
source = https://github.com/Mastermindzh/tidal-hifi/archive/2.0.0.zip
|
source = https://github.com/Mastermindzh/tidal-hifi/archive/2.0.0.zip
|
||||||
source = tidal-hifi.desktop
|
source = tidal-hifi.desktop
|
||||||
sha512sums = e1c0e47257cebe6b2609131964f0971c3eb70fc28c86f3d7177cb3cea09a3311236f4147bafa91347210fe2c96e6bd9d2e4ac7ca5b105e0c899657645705913d
|
sha512sums = 68fce020128b637fd37383a5afae71d2e4f3eec2d6b4bfcd7f410dcec18c91327d163deb21750e2251967a31f83b2b16092d11d3ff500a1fecd8c595448f380e
|
||||||
sha512sums = 35f38ac308b871c1822d7f6f760f2fb54c3748cf769822cb0f0dfb90f0f5754ba9316da5e903a0d2e9839de3a43ec76f238f3f2e44021956fa1da19142081349
|
sha512sums = 35f38ac308b871c1822d7f6f760f2fb54c3748cf769822cb0f0dfb90f0f5754ba9316da5e903a0d2e9839de3a43ec76f238f3f2e44021956fa1da19142081349
|
||||||
|
|
||||||
pkgname = tidal-hifi-git
|
pkgname = tidal-hifi-git
|
||||||
|
@@ -15,9 +15,11 @@ provides=("$_pkgname")
|
|||||||
|
|
||||||
source=("https://github.com/Mastermindzh/tidal-hifi/archive/$pkgver.zip"
|
source=("https://github.com/Mastermindzh/tidal-hifi/archive/$pkgver.zip"
|
||||||
"${_pkgname}.desktop")
|
"${_pkgname}.desktop")
|
||||||
sha512sums=('e1c0e47257cebe6b2609131964f0971c3eb70fc28c86f3d7177cb3cea09a3311236f4147bafa91347210fe2c96e6bd9d2e4ac7ca5b105e0c899657645705913d'
|
sha512sums=('68fce020128b637fd37383a5afae71d2e4f3eec2d6b4bfcd7f410dcec18c91327d163deb21750e2251967a31f83b2b16092d11d3ff500a1fecd8c595448f380e'
|
||||||
'35f38ac308b871c1822d7f6f760f2fb54c3748cf769822cb0f0dfb90f0f5754ba9316da5e903a0d2e9839de3a43ec76f238f3f2e44021956fa1da19142081349')
|
'35f38ac308b871c1822d7f6f760f2fb54c3748cf769822cb0f0dfb90f0f5754ba9316da5e903a0d2e9839de3a43ec76f238f3f2e44021956fa1da19142081349')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cdToPkg(){
|
cdToPkg(){
|
||||||
cd "tidal-hifi-$pkgver"
|
cd "tidal-hifi-$pkgver"
|
||||||
}
|
}
|
||||||
|
88
package-lock.json
generated
88
package-lock.json
generated
@@ -972,6 +972,15 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"discord-rpc": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/discord-rpc/-/discord-rpc-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-KJv0EVbGMlr04HoG6f5b3wD7X9kSHzQ2Ed2qfHSDvYJ1MkE8RbCQmMcQQrSvAxpfsqZgUjB/bsfi/mjyicCH+A==",
|
||||||
|
"requires": {
|
||||||
|
"node-fetch": "^2.6.1",
|
||||||
|
"ws": "^7.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"dmg-builder": {
|
"dmg-builder": {
|
||||||
"version": "21.2.0",
|
"version": "21.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.2.0.tgz",
|
||||||
@@ -1775,6 +1784,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
|
||||||
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
|
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
|
||||||
},
|
},
|
||||||
|
"is-docker": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
|
||||||
|
},
|
||||||
"is-extglob": {
|
"is-extglob": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||||
@@ -1855,9 +1869,12 @@
|
|||||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||||
},
|
},
|
||||||
"is-wsl": {
|
"is-wsl": {
|
||||||
"version": "2.1.1",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
||||||
"integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog=="
|
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
||||||
|
"requires": {
|
||||||
|
"is-docker": "^2.0.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"is-yarn-global": {
|
"is-yarn-global": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
@@ -2160,22 +2177,57 @@
|
|||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
||||||
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
||||||
},
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||||
|
},
|
||||||
"node-notifier": {
|
"node-notifier": {
|
||||||
"version": "6.0.0",
|
"version": "9.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz",
|
||||||
"integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==",
|
"integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"growly": "^1.3.0",
|
"growly": "^1.3.0",
|
||||||
"is-wsl": "^2.1.1",
|
"is-wsl": "^2.2.0",
|
||||||
"semver": "^6.3.0",
|
"semver": "^7.3.2",
|
||||||
"shellwords": "^0.1.1",
|
"shellwords": "^0.1.1",
|
||||||
"which": "^1.3.1"
|
"uuid": "^8.3.0",
|
||||||
|
"which": "^2.0.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"lru-cache": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||||
|
"requires": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "7.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
|
||||||
|
"requires": {
|
||||||
|
"lru-cache": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"version": "8.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||||
|
},
|
||||||
|
"which": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||||
|
"requires": {
|
||||||
|
"isexe": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3251,6 +3303,7 @@
|
|||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||||
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"isexe": "^2.0.0"
|
"isexe": "^2.0.0"
|
||||||
}
|
}
|
||||||
@@ -3365,6 +3418,11 @@
|
|||||||
"signal-exit": "^3.0.2"
|
"signal-exit": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "7.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
|
||||||
|
"integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g=="
|
||||||
|
},
|
||||||
"xdg-basedir": {
|
"xdg-basedir": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
|
||||||
@@ -3386,9 +3444,9 @@
|
|||||||
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
|
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
|
||||||
},
|
},
|
||||||
"y18n": {
|
"y18n": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
||||||
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
|
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "2.0.0",
|
"version": "2.1.0",
|
||||||
"description": "Tidal on Electron with widevine(hifi) support",
|
"description": "Tidal on Electron with widevine(hifi) support",
|
||||||
"main": "src/main.js",
|
"main": "src/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -23,11 +23,12 @@
|
|||||||
"homepage": "https://github.com/Mastermindzh/tidal-hifi",
|
"homepage": "https://github.com/Mastermindzh/tidal-hifi",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"discord-rpc": "^3.2.0",
|
||||||
"electron-store": "^5.1.1",
|
"electron-store": "^5.1.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"hotkeys-js": "^3.7.6",
|
"hotkeys-js": "^3.7.6",
|
||||||
"mpris-service": "^2.1.0",
|
"mpris-service": "^2.1.0",
|
||||||
"node-notifier": "^6.0.0",
|
"node-notifier": "^9.0.1",
|
||||||
"request": "^2.88.2"
|
"request": "^2.88.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@@ -20,6 +20,7 @@ const settings = {
|
|||||||
mpris: "mpris",
|
mpris: "mpris",
|
||||||
enableCustomHotkeys: "enableCustomHotkeys",
|
enableCustomHotkeys: "enableCustomHotkeys",
|
||||||
trayIcon: "trayIcon",
|
trayIcon: "trayIcon",
|
||||||
|
enableDiscord: "enableDiscord",
|
||||||
windowBounds: {
|
windowBounds: {
|
||||||
root: "windowBounds",
|
root: "windowBounds",
|
||||||
width: "windowBounds.width",
|
width: "windowBounds.width",
|
||||||
|
10
src/main.js
10
src/main.js
@@ -9,14 +9,15 @@ const {
|
|||||||
} = require("./scripts/settings");
|
} = require("./scripts/settings");
|
||||||
const { addTray, refreshTray } = require("./scripts/tray");
|
const { addTray, refreshTray } = require("./scripts/tray");
|
||||||
const { addMenu } = require("./scripts/menu");
|
const { addMenu } = require("./scripts/menu");
|
||||||
|
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const tidalUrl = "https://listen.tidal.com";
|
const tidalUrl = "https://listen.tidal.com";
|
||||||
const expressModule = require("./scripts/express");
|
const expressModule = require("./scripts/express");
|
||||||
const mediaKeys = require("./constants/mediaKeys");
|
const mediaKeys = require("./constants/mediaKeys");
|
||||||
const mediaInfoModule = require("./scripts/mediaInfo");
|
const mediaInfoModule = require("./scripts/mediaInfo");
|
||||||
|
const discordModule = require("./scripts/discord");
|
||||||
const globalEvents = require("./constants/globalEvents");
|
const globalEvents = require("./constants/globalEvents");
|
||||||
|
|
||||||
|
|
||||||
let mainWindow;
|
let mainWindow;
|
||||||
let icon = path.join(__dirname, "../assets/icon.png");
|
let icon = path.join(__dirname, "../assets/icon.png");
|
||||||
|
|
||||||
@@ -85,6 +86,7 @@ app.on("ready", () => {
|
|||||||
addGlobalShortcuts();
|
addGlobalShortcuts();
|
||||||
store.get(settings.trayIcon) && addTray({ icon }) && refreshTray();
|
store.get(settings.trayIcon) && addTray({ icon }) && refreshTray();
|
||||||
store.get(settings.api) && expressModule.run(mainWindow);
|
store.get(settings.api) && expressModule.run(mainWindow);
|
||||||
|
store.get(settings.enableDiscord) && discordModule.initRPC();
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on("activate", function () {
|
app.on("activate", function () {
|
||||||
@@ -113,6 +115,12 @@ ipcMain.on(globalEvents.updateStatus, (event, arg) => {
|
|||||||
});
|
});
|
||||||
ipcMain.on(globalEvents.storeChanged, (event, arg) => {
|
ipcMain.on(globalEvents.storeChanged, (event, arg) => {
|
||||||
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
|
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
|
||||||
|
|
||||||
|
if(store.get(settings.enableDiscord) && !discordModule.rpc) {
|
||||||
|
discordModule.initRPC();
|
||||||
|
} else if(!store.get(settings.enableDiscord) && discordModule.rpc) {
|
||||||
|
discordModule.unRPC();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.on(globalEvents.error, (event, arg) => {
|
ipcMain.on(globalEvents.error, (event, arg) => {
|
||||||
|
@@ -20,6 +20,7 @@ function refreshSettings() {
|
|||||||
trayIcon.checked = store.get(settings.trayIcon);
|
trayIcon.checked = store.get(settings.trayIcon);
|
||||||
mpris.checked = store.get(settings.mpris);
|
mpris.checked = store.get(settings.mpris);
|
||||||
enableCustomHotkeys.checked = store.get(settings.enableCustomHotkeys);
|
enableCustomHotkeys.checked = store.get(settings.enableCustomHotkeys);
|
||||||
|
enableDiscord.checked = store.get(settings.enableDiscord);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,6 +82,7 @@ window.addEventListener("DOMContentLoaded", () => {
|
|||||||
trayIcon = get("trayIcon");
|
trayIcon = get("trayIcon");
|
||||||
mpris = get("mprisCheckbox");
|
mpris = get("mprisCheckbox");
|
||||||
enableCustomHotkeys = get("enableCustomHotkeys");
|
enableCustomHotkeys = get("enableCustomHotkeys");
|
||||||
|
enableDiscord = get("enableDiscord");
|
||||||
|
|
||||||
refreshSettings();
|
refreshSettings();
|
||||||
|
|
||||||
@@ -92,4 +94,5 @@ window.addEventListener("DOMContentLoaded", () => {
|
|||||||
addInputListener(trayIcon, settings.trayIcon);
|
addInputListener(trayIcon, settings.trayIcon);
|
||||||
addInputListener(mpris, settings.mpris);
|
addInputListener(mpris, settings.mpris);
|
||||||
addInputListener(enableCustomHotkeys, settings.enableCustomHotkeys);
|
addInputListener(enableCustomHotkeys, settings.enableCustomHotkeys);
|
||||||
|
addInputListener(enableDiscord, settings.enableDiscord);
|
||||||
});
|
});
|
||||||
|
@@ -141,6 +141,16 @@
|
|||||||
<span class="slider round"></span>
|
<span class="slider round"></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="option">
|
||||||
|
<h4>Discord RPC</h4>
|
||||||
|
<p>
|
||||||
|
Show what you're listening to on Discord
|
||||||
|
</p>
|
||||||
|
<label class="switch">
|
||||||
|
<input id="enableDiscord" type="checkbox">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section id="about" class="tab-panel">
|
<section id="about" class="tab-panel">
|
||||||
|
@@ -18,7 +18,7 @@ const elements = {
|
|||||||
next: '*[data-test="next"]',
|
next: '*[data-test="next"]',
|
||||||
previous: 'button[data-test="previous"]',
|
previous: 'button[data-test="previous"]',
|
||||||
title: '*[data-test^="footer-track-title"]',
|
title: '*[data-test^="footer-track-title"]',
|
||||||
artists: '*[class^="mediaArtists"]',
|
artists: '*[class^="css-14o5h2y"]',
|
||||||
home: '*[data-test="menu--home"]',
|
home: '*[data-test="menu--home"]',
|
||||||
back: '[class^="backwardButton"]',
|
back: '[class^="backwardButton"]',
|
||||||
forward: '[class^="forwardButton"]',
|
forward: '[class^="forwardButton"]',
|
||||||
@@ -30,6 +30,7 @@ const elements = {
|
|||||||
settings: '*[data-test^="open-settings"]',
|
settings: '*[data-test^="open-settings"]',
|
||||||
media: '*[data-test="current-media-imagery"]',
|
media: '*[data-test="current-media-imagery"]',
|
||||||
image: "img",
|
image: "img",
|
||||||
|
url: 'a[href*="/track/"]',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an element from the dom
|
* Get an element from the dom
|
||||||
@@ -155,8 +156,8 @@ function handleLogout() {
|
|||||||
},
|
},
|
||||||
function (response) {
|
function (response) {
|
||||||
if (logoutOptions.indexOf("Yes, please") == response) {
|
if (logoutOptions.indexOf("Yes, please") == response) {
|
||||||
for (i = 0; i < window.localStorage.length; i++) {
|
for (let i = 0; i < window.localStorage.length; i++) {
|
||||||
key = window.localStorage.key(i);
|
const key = window.localStorage.key(i);
|
||||||
if (key.startsWith("_TIDAL_activeSession")) {
|
if (key.startsWith("_TIDAL_activeSession")) {
|
||||||
window.localStorage.removeItem(key);
|
window.localStorage.removeItem(key);
|
||||||
i = window.localStorage.length + 1;
|
i = window.localStorage.length + 1;
|
||||||
@@ -223,6 +224,7 @@ function updateStatus() {
|
|||||||
*/
|
*/
|
||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
const title = elements.getText("title");
|
const title = elements.getText("title");
|
||||||
|
const url = elements.get("url").href.replace(/[^0-9]/g, "");
|
||||||
const artists = elements.getText("artists");
|
const artists = elements.getText("artists");
|
||||||
const songDashArtistTitle = `${title} - ${artists}`;
|
const songDashArtistTitle = `${title} - ${artists}`;
|
||||||
|
|
||||||
@@ -238,6 +240,7 @@ setInterval(function () {
|
|||||||
const options = {
|
const options = {
|
||||||
title,
|
title,
|
||||||
message: artists,
|
message: artists,
|
||||||
|
url: `https://tidal.com/browse/track/${url}`,
|
||||||
};
|
};
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
if (image.startsWith("http")) {
|
if (image.startsWith("http")) {
|
||||||
|
52
src/scripts/discord.js
Normal file
52
src/scripts/discord.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
const discordrpc = require("discord-rpc");
|
||||||
|
const clientId = '833617820704440341';
|
||||||
|
const mediaInfoModule = require("./mediaInfo");
|
||||||
|
|
||||||
|
const discordModule = [];
|
||||||
|
|
||||||
|
let discord;
|
||||||
|
let rpc;
|
||||||
|
|
||||||
|
const idleStatus = {
|
||||||
|
details: `Browsing Tidal`,
|
||||||
|
largeImageKey: 'tidal-hifi-icon',
|
||||||
|
largeImageText: 'Tidal HiFi 2.0.0',
|
||||||
|
instance: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
discordModule.initRPC = function () {
|
||||||
|
rpc = new discordrpc.Client({ transport: 'ipc' });
|
||||||
|
rpc.login({ clientId }).catch(console.error);
|
||||||
|
discordModule.rpc = rpc;
|
||||||
|
|
||||||
|
rpc.on('ready', () => {
|
||||||
|
rpc.setActivity(idleStatus);
|
||||||
|
})
|
||||||
|
|
||||||
|
discord = setInterval(() => {
|
||||||
|
if (mediaInfoModule.mediaInfo.status == 'paused' && rpc) {
|
||||||
|
rpc.setActivity(idleStatus);
|
||||||
|
} else if (rpc) {
|
||||||
|
rpc.setActivity({
|
||||||
|
details: `Listening to ${mediaInfoModule.mediaInfo.title}`,
|
||||||
|
state: mediaInfoModule.mediaInfo.artist,
|
||||||
|
largeImageKey: 'tidal-hifi-icon',
|
||||||
|
largeImageText: 'Tidal HiFi 2.0.0',
|
||||||
|
buttons: [
|
||||||
|
{ label: "Play on Tidal", url: mediaInfoModule.mediaInfo.url }
|
||||||
|
],
|
||||||
|
instance: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 15e3);
|
||||||
|
}
|
||||||
|
|
||||||
|
discordModule.unRPC = function () {
|
||||||
|
clearInterval(discord);
|
||||||
|
rpc.clearActivity();
|
||||||
|
rpc.destroy();
|
||||||
|
rpc = false;
|
||||||
|
discordModule.rpc = rpc;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = discordModule;
|
@@ -5,6 +5,7 @@ const mediaInfo = {
|
|||||||
artist: "",
|
artist: "",
|
||||||
icon: "",
|
icon: "",
|
||||||
status: statuses.paused,
|
status: statuses.paused,
|
||||||
|
url: ""
|
||||||
};
|
};
|
||||||
const mediaInfoModule = {
|
const mediaInfoModule = {
|
||||||
mediaInfo,
|
mediaInfo,
|
||||||
@@ -17,6 +18,7 @@ mediaInfoModule.update = function(arg) {
|
|||||||
mediaInfo.title = propOrDefault(arg.title);
|
mediaInfo.title = propOrDefault(arg.title);
|
||||||
mediaInfo.artist = propOrDefault(arg.message);
|
mediaInfo.artist = propOrDefault(arg.message);
|
||||||
mediaInfo.icon = propOrDefault(arg.icon);
|
mediaInfo.icon = propOrDefault(arg.icon);
|
||||||
|
mediaInfo.url = propOrDefault(arg.url);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -17,6 +17,7 @@ const store = new Store({
|
|||||||
trayIcon: true,
|
trayIcon: true,
|
||||||
mpris: false,
|
mpris: false,
|
||||||
enableCustomHotkeys: false,
|
enableCustomHotkeys: false,
|
||||||
|
enableDiscord: false,
|
||||||
windowBounds: { width: 800, height: 600 },
|
windowBounds: { width: 800, height: 600 },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user