mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-09-09 21:34:44 +02:00
Compare commits
2 Commits
5f94cfbf63
...
develop
Author | SHA1 | Date | |
---|---|---|---|
d67f62c0dc | |||
b2afd44dd6 |
@@ -4,12 +4,12 @@ name: default
|
||||
|
||||
steps:
|
||||
- name: install
|
||||
image: node:22.17.0
|
||||
image: node:19.4.0
|
||||
commands:
|
||||
- npm install
|
||||
|
||||
- name: build_with_linux
|
||||
image: node:22.17.0
|
||||
image: node:19.4.0
|
||||
commands:
|
||||
- apt-get update && apt-get upgrade -y
|
||||
- apt-get install -y libarchive-tools rpm
|
||||
|
42
.github/workflows/build.yml
vendored
42
.github/workflows/build.yml
vendored
@@ -21,30 +21,26 @@ jobs:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.12.0
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: linux-builds
|
||||
# path: dist/
|
||||
|
||||
# build_on_mac:
|
||||
# runs-on: macos-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
build_on_mac:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
|
||||
# build_on_win:
|
||||
# runs-on: windows-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
build_on_win:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
|
54
.github/workflows/release.yml
vendored
54
.github/workflows/release.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.12.0
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@master
|
||||
@@ -29,30 +29,30 @@ jobs:
|
||||
name: linux-builds
|
||||
path: dist/
|
||||
|
||||
# build_on_mac:
|
||||
# runs-on: macos-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: mac-builds
|
||||
# path: ./dist/
|
||||
build_on_mac:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: mac-builds
|
||||
path: ./dist/
|
||||
|
||||
# build_on_win:
|
||||
# runs-on: windows-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: windows-builds
|
||||
# path: dist/
|
||||
build_on_win:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: windows-builds
|
||||
path: dist/
|
||||
|
@@ -1,16 +1,10 @@
|
||||
{
|
||||
"plugins": [
|
||||
"stylelint-prettier"
|
||||
],
|
||||
"extends": [
|
||||
"stylelint-config-standard-scss"
|
||||
],
|
||||
"ignoreFiles": [
|
||||
"src/themes/**.scss"
|
||||
],
|
||||
"plugins": ["stylelint-prettier"],
|
||||
"extends": ["stylelint-config-standard-scss"],
|
||||
"ignoreFiles": ["src/themes/**.scss"],
|
||||
"rules": {
|
||||
"prettier/prettier": true,
|
||||
"scss/at-extend-no-missing-placeholder": null,
|
||||
"no-descending-specificity": null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -17,9 +17,7 @@
|
||||
"trackid",
|
||||
"tracklist",
|
||||
"widevine",
|
||||
"wvcus",
|
||||
"xesam",
|
||||
"xhayper"
|
||||
"xesam"
|
||||
],
|
||||
"sonarlint.connectedMode.project": {
|
||||
"connectionId": "public-sonarcloud",
|
||||
|
43
CHANGELOG.md
43
CHANGELOG.md
@@ -4,42 +4,6 @@ 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/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [5.20.1]
|
||||
|
||||
- Updated electron to 37.2.5
|
||||
|
||||
## [5.20.0]
|
||||
|
||||
- Removes the `--enable-features=UseOzonePlatform` flag, as the Ozone platform has been the default on Linux since Electron 28 and this flag is no longer necessary.
|
||||
- Adds the `--enable-wayland-ime` flag to enable Input Method Editor (IME) support in Wayland environments, improving the input experience for CJK and other users.
|
||||
- Updated various dependencies
|
||||
- Updated Electron to 37, potentially fixing [#580](https://github.com/Mastermindzh/tidal-hifi/issues/580)
|
||||
|
||||
## [5.19.0]
|
||||
|
||||
- Fixed the issue where media updates would cease to work after album names can't be found
|
||||
- Will simply report an empty string when it can't find the album
|
||||
- Updated various dependencies
|
||||
|
||||
## [5.18.2]
|
||||
|
||||
- Reverted to sass 1.79.4 to fix `Nix` builds
|
||||
- Changed electron-builder.base.yml to now generate the correct .desktop entries again
|
||||
- Should fix flatpak build
|
||||
|
||||
## [5.18.1]
|
||||
|
||||
- Fixed the login bug
|
||||
- Upgraded electron to 35.1.1
|
||||
- Added Widevine/CDM info to startup
|
||||
- delayed remote electron initializer
|
||||
|
||||
## [5.18.0]
|
||||
|
||||
- [Dianoga](https://github.com/Dianoga) fixed the duration selector, restoring mpris & partial API data.
|
||||
- PR: #554
|
||||
- Added `xesam:url` property to mpris metadata fixes [#506](https://github.com/Mastermindzh/tidal-hifi/issues/506)
|
||||
|
||||
## [5.17.0]
|
||||
|
||||
- Added an option to disable the dynamic title and set it to a static one, [#491](https://github.com/Mastermindzh/tidal-hifi/pull/491)
|
||||
@@ -57,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
- Added all missing swagger/openApi info with the help of [Times-Z](https://github.com/Times-Z)
|
||||
- Updated most dependency versions
|
||||
|
||||
- This includes Electron 31!
|
||||
|
||||
- Added a channel selector so we can now use Tidal's staging environment directly from the app
|
||||
@@ -148,10 +113,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
- Updated Electron to 28.1.1 (fixes [325](https://github.com/Mastermindzh/tidal-hifi/issues/325))
|
||||
- Updated dependencies to latest
|
||||
|
||||
- added theme files to stylelint ignore
|
||||
- fixed other stylelint errors
|
||||
|
||||
- Added functionality to favorite a song (fixes [#323](https://github.com/Mastermindzh/tidal-hifi/issues/323))
|
||||
|
||||
- Added a hotkey to favorite ("Add to collection") songs: Control+a
|
||||
- Added the "favorite" field in the `mediaInfo` and the API `/current` endpoint
|
||||
- Added an endpoint to toggle favoriting a song: `http://localhost:47836/favorite/toggle`
|
||||
@@ -172,10 +139,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Added settings to customize the Discord rich presence information
|
||||
- Discord settings are now also collapsible like the ListenBrainz ones are
|
||||
- Restyled settings menu to include version number and useful links on the about page
|
||||

|
||||

|
||||
- The ListenBrainz integration has been extended with a configurable (5 seconds by default) delay in song reporting so that it doesn't spam the API when you are cycling through songs.
|
||||
- Custom CSS now also applies to settings window
|
||||

|
||||

|
||||
|
||||
## [5.6.0]
|
||||
|
||||
|
@@ -8,4 +8,3 @@ Only the very latest 😄.
|
||||
|
||||
If you find a vulnerability just add it as an issue.
|
||||
If there's an especially bad vulnerability that you don't want to make public just send me a private message (email, discord, wherever).
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
appId: com.rickvanlieshout.tidal-hifi
|
||||
electronVersion: 37.2.5
|
||||
electronVersion: 28.1.1
|
||||
electronDownload:
|
||||
version: 37.2.5+wvcus
|
||||
version: 28.1.1+wvcus
|
||||
mirror: https://github.com/castlabs/electron-releases/releases/download/v
|
||||
snap:
|
||||
plugs:
|
||||
@@ -17,25 +17,24 @@ linux:
|
||||
executableName: tidal-hifi
|
||||
executableArgs:
|
||||
[
|
||||
"--enable-features=UseOzonePlatform",
|
||||
"--ozone-platform-hint=auto",
|
||||
"--enable-features=WaylandWindowDecorations",
|
||||
"--enable-wayland-ime",
|
||||
"--use-angle",
|
||||
]
|
||||
desktop:
|
||||
entry:
|
||||
Encoding: "UTF-8"
|
||||
Name: "TIDAL Hi-Fi"
|
||||
GenericName: "TIDAL Hi-Fi"
|
||||
Comment: "The web version of listen.tidal.com running in electron with hifi support thanks to widevine."
|
||||
Icon: "tidal-hifi"
|
||||
StartupNotify: "true"
|
||||
Terminal: "false"
|
||||
Type: "Application"
|
||||
Categories: "Network;Application;AudioVideo;Audio;Video"
|
||||
StartupWMClass: "tidal-hifi"
|
||||
X-PulseAudio-Properties: "media.role=music"
|
||||
MimeType: "x-scheme-handler/tidal;"
|
||||
Encoding: UTF-8
|
||||
Name: TIDAL Hi-Fi
|
||||
GenericName: TIDAL Hi-Fi
|
||||
Comment: The web version of listen.tidal.com running in electron with hifi support thanks to widevine.
|
||||
Icon: tidal-hifi
|
||||
StartupNotify: true
|
||||
Terminal: false
|
||||
Type: Application
|
||||
Categories: Network;Application;AudioVideo;Audio;Video
|
||||
StartupWMClass: tidal-hifi
|
||||
X-PulseAudio-Properties: media.role=music
|
||||
MimeType: x-scheme-handler/tidal;
|
||||
|
||||
mac:
|
||||
category: public.app-category.entertainment
|
||||
win:
|
||||
|
5441
package-lock.json
generated
5441
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
52
package.json
52
package.json
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "tidal-hifi",
|
||||
"version": "5.20.1",
|
||||
"version": "5.17.0",
|
||||
"description": "Tidal on Electron with widevine(hifi) support",
|
||||
"main": "ts-dist/main.js",
|
||||
"scripts": {
|
||||
"start": "electron --inspect=0.0.0.0:5858 --remote-debugging-port=8315 --remote-allow-origins=* .",
|
||||
"start": "electron --inspect=0.0.0.0:5858 .",
|
||||
"watchStart": "nodemon dist -x \"npm run start\"",
|
||||
"compile": "tsc && npm run sass-and-copy",
|
||||
"deps": "npm run watch",
|
||||
@@ -23,6 +23,7 @@
|
||||
"build-mac": "npm run builder -- -c ./build/electron-builder.yml -m",
|
||||
"build-base": "npm run builder -- -c ./build/electron-builder.base.yml",
|
||||
"prebuilder": "npm run compile",
|
||||
"prettier": "prettier . --write",
|
||||
"builder": "electron-builder --publish=never",
|
||||
"sass": "sass ./src/pages/settings/settings.scss ./src/pages/settings/settings.css && sass --no-source-map src/themes:themes",
|
||||
"style-lint": "npx stylelint **/*.scss",
|
||||
@@ -40,45 +41,44 @@
|
||||
"homepage": "https://github.com/Mastermindzh/tidal-hifi",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@electron/remote": "^2.1.3",
|
||||
"@electron/remote": "^2.1.2",
|
||||
"@types/swagger-jsdoc": "^6.0.4",
|
||||
"@xhayper/discord-rpc": "1.3.0",
|
||||
"axios": "^1.10.0",
|
||||
"@xhayper/discord-rpc": "^1.2.0",
|
||||
"axios": "^1.7.7",
|
||||
"cors": "^2.8.5",
|
||||
"electron-store": "^8.2.0",
|
||||
"express": "^5.1.0",
|
||||
"hotkeys-js": "^3.13.15",
|
||||
"express": "^4.21.1",
|
||||
"hotkeys-js": "^3.13.7",
|
||||
"mpris-service": "^2.1.2",
|
||||
"request": "^2.88.2",
|
||||
"sass": "1.92.0",
|
||||
"sass": "^1.79.4",
|
||||
"swagger-ui-express": "^5.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@mastermindzh/prettier-config": "^1.0.0",
|
||||
"@types/cors": "^2.8.19",
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/node": "^22.16.2",
|
||||
"@types/cors": "^2.8.17",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/node": "^20.14.10",
|
||||
"@types/request": "^2.48.12",
|
||||
"@types/swagger-ui-express": "^4.1.8",
|
||||
"@typescript-eslint/eslint-plugin": "^8.36.0",
|
||||
"@typescript-eslint/parser": "^8.36.0",
|
||||
"@types/swagger-ui-express": "^4.1.6",
|
||||
"@typescript-eslint/eslint-plugin": "^7.16.0",
|
||||
"@typescript-eslint/parser": "^7.15.0",
|
||||
"copyfiles": "^2.4.1",
|
||||
"electron": "github:castlabs/electron-releases#v37.2.5+wvcus",
|
||||
"electron-builder": "~26.0.12",
|
||||
"eslint": "^9.30.1",
|
||||
"electron": "git+https://github.com/castlabs/electron-releases#v31.1.0+wvcus",
|
||||
"electron-builder": "~24.9.4",
|
||||
"eslint": "^8.57.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"markdown-toc": "^1.2.0",
|
||||
"node-abi": "^4.12.0",
|
||||
"nodemon": "^3.1.10",
|
||||
"prettier": "^3.6.2",
|
||||
"stylelint": "^16.21.1",
|
||||
"stylelint-config-standard": "^39.0.0",
|
||||
"stylelint-config-standard-scss": "^15.0.1",
|
||||
"stylelint-prettier": "^5.0.3",
|
||||
"nodemon": "^3.1.4",
|
||||
"prettier": "^3.3.2",
|
||||
"stylelint": "^16.6.1",
|
||||
"stylelint-config-standard": "^36.0.1",
|
||||
"stylelint-config-standard-scss": "^13.1.0",
|
||||
"stylelint-prettier": "^5.0.0",
|
||||
"swagger-jsdoc": "^6.2.8",
|
||||
"ts-node": "^10.9.2",
|
||||
"tsc-watch": "^7.1.1",
|
||||
"typescript": "^5.8.3"
|
||||
"tsc-watch": "^6.2.0",
|
||||
"typescript": "^5.5.3"
|
||||
},
|
||||
"prettier": "@mastermindzh/prettier-config"
|
||||
}
|
||||
|
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"ignoreDeps": ["@types/node", "electron-store", "@xhayper/discord-rpc"]
|
||||
}
|
@@ -22,13 +22,12 @@
|
||||
media: '*[data-test="current-media-imagery"]',
|
||||
image: "img",
|
||||
current: '*[data-test="current-time"]',
|
||||
duration: '*[class^=_playbackControlsContainer] *[data-test="duration"]',
|
||||
duration: '*[class^=playbackControlsContainer] *[data-test="duration"]',
|
||||
bar: '*[data-test="progress-bar"]',
|
||||
footer: "#footerPlayer",
|
||||
mediaItem: "[data-type='mediaItem']",
|
||||
album_header_title: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
playing_from: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
queue_album: "*[class^=playQueueItemsContainer] *[class^=groupTitle] span:nth-child(2)",
|
||||
album_header_title: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
playingFrom: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
currentlyPlaying: "[class^='isPlayingIcon'], [data-test-is-playing='true']",
|
||||
album_name_cell: '[class^="album"]',
|
||||
tracklist_row: '[data-test="tracklist-row"]',
|
||||
|
@@ -88,9 +88,8 @@ export const addCurrentInfo = (expressApp: Router) => {
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/MediaInfo'
|
||||
*/
|
||||
expressApp.get("/current", (_req, res) => {
|
||||
res.json({ ...mediaInfo, artist: mediaInfo.artists });
|
||||
});
|
||||
expressApp.get("/current", (req, res) => res.json({ ...mediaInfo, artist: mediaInfo.artists }));
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /current/image:
|
||||
|
@@ -21,12 +21,8 @@ export const startApi = (mainWindow: BrowserWindow) => {
|
||||
expressApp.use(cors());
|
||||
expressApp.use(express.json());
|
||||
expressApp.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec));
|
||||
expressApp.get("/", (req, res) => {
|
||||
res.send("Hello World!");
|
||||
});
|
||||
expressApp.get("/swagger.json", (req, res) => {
|
||||
res.json(swaggerSpec);
|
||||
});
|
||||
expressApp.get("/", (req, res) => res.send("Hello World!"));
|
||||
expressApp.get("/swagger.json", (req, res) => res.json(swaggerSpec));
|
||||
|
||||
// add features
|
||||
addLegacyApi(expressApp, mainWindow);
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "TIDAL Hi-Fi API",
|
||||
"version": "5.20.1",
|
||||
"version": "5.17.0",
|
||||
"description": "",
|
||||
"license": {
|
||||
"name": "MIT",
|
||||
|
@@ -26,6 +26,7 @@ import {
|
||||
import { addTray, refreshTray } from "./scripts/tray";
|
||||
let mainInhibitorId = -1;
|
||||
|
||||
initialize();
|
||||
let mainWindow: BrowserWindow;
|
||||
const icon = path.join(__dirname, "../assets/icon.png");
|
||||
const PROTOCOL_PREFIX = "tidal";
|
||||
@@ -97,7 +98,6 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
enable(mainWindow.webContents);
|
||||
registerHttpProtocols();
|
||||
syncMenuBarWithStore();
|
||||
@@ -126,7 +126,6 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Emitted when the window is closed.
|
||||
mainWindow.on("closed", function () {
|
||||
releaseInhibitorIfActive(mainInhibitorId);
|
||||
@@ -179,7 +178,6 @@ app.on("ready", async () => {
|
||||
|
||||
if (isMainInstance() || isMultipleInstancesAllowed()) {
|
||||
await components.whenReady();
|
||||
initialize();
|
||||
|
||||
// Adblock
|
||||
if (settingsStore.get(settings.adBlock)) {
|
||||
@@ -190,8 +188,6 @@ app.on("ready", async () => {
|
||||
});
|
||||
}
|
||||
|
||||
Logger.log("components ready:", components.status());
|
||||
|
||||
createWindow();
|
||||
addMenu(mainWindow);
|
||||
createSettingsWindow();
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -54,12 +54,12 @@ const elements = {
|
||||
media: '*[data-test="current-media-imagery"]',
|
||||
image: "img",
|
||||
current: '*[data-test="current-time"]',
|
||||
duration: '*[class^=_playbackControlsContainer] *[data-test="duration"]',
|
||||
duration: '*[class^=playbackControlsContainer] *[data-test="duration"]',
|
||||
bar: '*[data-test="progress-bar"]',
|
||||
footer: "#footerPlayer",
|
||||
mediaItem: "[data-type='mediaItem']",
|
||||
album_header_title: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
playing_from: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
album_header_title: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
playing_from: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
queue_album: "*[class^=playQueueItemsContainer] *[class^=groupTitle] span:nth-child(2)",
|
||||
currentlyPlaying: "[class^='isPlayingIcon'], [data-test-is-playing='true']",
|
||||
album_name_cell: '[class^="album"]',
|
||||
@@ -115,38 +115,34 @@ const elements = {
|
||||
},
|
||||
|
||||
getAlbumName: function () {
|
||||
try {
|
||||
//If listening to an album, get its name from the header title
|
||||
if (globalThis.location.href.includes("/album/")) {
|
||||
const albumName = globalThis.document.querySelector(this.album_header_title);
|
||||
if (albumName) {
|
||||
return albumName.textContent;
|
||||
}
|
||||
//If listening to a playlist or a mix, get album name from the list
|
||||
} else if (
|
||||
globalThis.location.href.includes("/playlist/") ||
|
||||
globalThis.location.href.includes("/mix/")
|
||||
) {
|
||||
if (this.currentlyPlaying === MediaStatus.playing) {
|
||||
// find the currently playing element from the list (which might be in an album icon), traverse back up to the mediaItem (row) and select the album cell.
|
||||
// document.querySelector("[class^='isPlayingIcon'], [data-test-is-playing='true']").closest('[data-type="mediaItem"]').querySelector('[class^="album"]').textContent
|
||||
const row = window.document.querySelector(this.currentlyPlaying).closest(this.mediaItem);
|
||||
if (row) {
|
||||
return row.querySelector(this.album_name_cell).textContent;
|
||||
}
|
||||
//If listening to an album, get its name from the header title
|
||||
if (window.location.href.includes("/album/")) {
|
||||
const albumName = window.document.querySelector(this.album_header_title);
|
||||
if (albumName) {
|
||||
return albumName.textContent;
|
||||
}
|
||||
//If listening to a playlist or a mix, get album name from the list
|
||||
} else if (
|
||||
window.location.href.includes("/playlist/") ||
|
||||
window.location.href.includes("/mix/")
|
||||
) {
|
||||
if (currentPlayStatus === MediaStatus.playing) {
|
||||
// find the currently playing element from the list (which might be in an album icon), traverse back up to the mediaItem (row) and select the album cell.
|
||||
// document.querySelector("[class^='isPlayingIcon'], [data-test-is-playing='true']").closest('[data-type="mediaItem"]').querySelector('[class^="album"]').textContent
|
||||
const row = window.document.querySelector(this.currentlyPlaying).closest(this.mediaItem);
|
||||
if (row) {
|
||||
return row.querySelector(this.album_name_cell).textContent;
|
||||
}
|
||||
}
|
||||
|
||||
// see whether we're on the queue page and get it from there
|
||||
const queueAlbumName = this.getText("queue_album");
|
||||
if (queueAlbumName) {
|
||||
return queueAlbumName;
|
||||
}
|
||||
|
||||
return "";
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
|
||||
// see whether we're on the queue page and get it from there
|
||||
const queueAlbumName = elements.getText("queue_album");
|
||||
if (queueAlbumName) {
|
||||
return queueAlbumName;
|
||||
}
|
||||
|
||||
return "";
|
||||
},
|
||||
|
||||
isMuted: function () {
|
||||
@@ -487,7 +483,6 @@ function updateMpris(mediaInfo: MediaInfo) {
|
||||
"xesam:title": mediaInfo.title,
|
||||
"xesam:artist": [mediaInfo.artists],
|
||||
"xesam:album": mediaInfo.album,
|
||||
"xesam:url": mediaInfo.url,
|
||||
"mpris:artUrl": mediaInfo.image,
|
||||
"mpris:length": convertDuration(mediaInfo.duration) * 1000 * 1000,
|
||||
"mpris:trackid": "/org/mpris/MediaPlayer2/track/" + getTrackID(),
|
||||
|
@@ -26,7 +26,7 @@ const defaultPresence = {
|
||||
largeImageKey: "tidal-hifi-icon",
|
||||
largeImageText: `TIDAL Hi-Fi ${app.getVersion()}`,
|
||||
instance: false,
|
||||
type: ACTIVITY_LISTENING
|
||||
type: ACTIVITY_LISTENING,
|
||||
};
|
||||
|
||||
const updateActivity = () => {
|
||||
@@ -103,7 +103,8 @@ const getActivity = (): SetActivity => {
|
||||
if (includeTimestamps) {
|
||||
const currentSeconds = convertDurationToSeconds(mediaInfo.current);
|
||||
const durationSeconds = convertDurationToSeconds(mediaInfo.duration);
|
||||
const now = Math.trunc((Date.now() + 500) / 1000);
|
||||
const date = new Date();
|
||||
const now = Math.floor(date.getTime() / 1000);
|
||||
presence.startTimestamp = now - currentSeconds;
|
||||
presence.endTimestamp = presence.startTimestamp + durationSeconds;
|
||||
}
|
||||
@@ -117,15 +118,17 @@ const getActivity = (): SetActivity => {
|
||||
const connectWithRetry = async (retryCount = 0) => {
|
||||
try {
|
||||
await rpc.login();
|
||||
Logger.log('Connected to Discord');
|
||||
Logger.log("Connected to Discord");
|
||||
rpc.on("ready", updateActivity);
|
||||
Object.values(globalEvents).forEach(event => ipcMain.on(event, observer));
|
||||
Object.values(globalEvents).forEach((event) => ipcMain.on(event, observer));
|
||||
} catch (error) {
|
||||
if (retryCount < MAX_RETRIES) {
|
||||
Logger.log(`Failed to connect to Discord, retrying in ${RETRY_DELAY/1000} seconds... (Attempt ${retryCount + 1}/${MAX_RETRIES})`);
|
||||
Logger.log(
|
||||
`Failed to connect to Discord, retrying in ${RETRY_DELAY / 1000} seconds... (Attempt ${retryCount + 1}/${MAX_RETRIES})`
|
||||
);
|
||||
setTimeout(() => connectWithRetry(retryCount + 1), RETRY_DELAY);
|
||||
} else {
|
||||
Logger.log('Failed to connect to Discord after maximum retry attempts');
|
||||
Logger.log("Failed to connect to Discord after maximum retry attempts");
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -134,7 +137,7 @@ const connectWithRetry = async (retryCount = 0) => {
|
||||
* Set up the discord rpc and listen on globalEvents.updateInfo
|
||||
*/
|
||||
export const initRPC = () => {
|
||||
rpc = new Client({ transport: {type: "ipc"}, clientId });
|
||||
rpc = new Client({ transport: { type: "ipc" }, clientId });
|
||||
connectWithRetry();
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user