Compare commits

..

No commits in common. "7376df7f30ab486249d859c9be91d3ff14ac5a90" and "a819e1eb45f9c2764fc351453b6066f09309e974" have entirely different histories.

8 changed files with 373 additions and 728 deletions

View File

@ -4,12 +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.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

901
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "tidal-hifi",
"version": "5.19.0",
"version": "5.18.2",
"description": "Tidal on Electron with widevine(hifi) support",
"main": "ts-dist/main.js",
"scripts": {
@ -45,10 +45,10 @@
"@xhayper/discord-rpc": "^1.2.1",
"axios": "^1.8.4",
"electron-store": "^8.2.0",
"express": "^5.1.0",
"express": "^4.21.2",
"hotkeys-js": "^3.13.9",
"mpris-service": "^2.1.2",
"sass": "1.86.3",
"sass": "1.79.4",
"swagger-ui-express": "^5.0.1",
"cors": "^2.8.5",
"request": "^2.88.2"
@ -56,28 +56,28 @@
"devDependencies": {
"@mastermindzh/prettier-config": "^1.0.0",
"@types/cors": "^2.8.17",
"@types/express": "^5.0.1",
"@types/node": "^20.17.30",
"@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": "^7.18.0",
"@typescript-eslint/parser": "^7.18.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#v35.1.1+wvcus",
"electron-builder": "~26.0.12",
"eslint": "^8.57.0",
"js-yaml": "^4.1.0",
"markdown-toc": "^1.2.0",
"nodemon": "^3.1.9",
"prettier": "^3.5.3",
"stylelint": "^16.18.0",
"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.3",
"stylelint-prettier": "^5.0.0",
"swagger-jsdoc": "^6.2.8",
"ts-node": "^10.9.2",
"tsc-watch": "^6.2.1",
"typescript": "^5.8.3"
"tsc-watch": "^6.2.0",
"typescript": "^5.5.3"
},
"prettier": "@mastermindzh/prettier-config"
}

View File

@ -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:

View File

@ -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);

View File

@ -2,7 +2,7 @@
"openapi": "3.1.0",
"info": {
"title": "TIDAL Hi-Fi API",
"version": "5.19.0",
"version": "5.18.2",
"description": "",
"license": {
"name": "MIT",
@ -21,9 +21,7 @@
"/current": {
"get": {
"summary": "Get current media info",
"tags": [
"current"
],
"tags": ["current"],
"responses": {
"200": {
"description": "Current media info",
@ -41,9 +39,7 @@
"/current/image": {
"get": {
"summary": "Get current media image",
"tags": [
"current"
],
"tags": ["current"],
"responses": {
"200": {
"description": "Current media image",
@ -65,9 +61,7 @@
"/player/play": {
"post": {
"summary": "Play the current media",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -85,9 +79,7 @@
"/player/favorite/toggle": {
"post": {
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -105,9 +97,7 @@
"/player/pause": {
"post": {
"summary": "Pause the current media",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -125,9 +115,7 @@
"/player/next": {
"post": {
"summary": "Play the next song",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -145,9 +133,7 @@
"/player/previous": {
"post": {
"summary": "Play the previous song",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -165,9 +151,7 @@
"/player/shuffle/toggle": {
"post": {
"summary": "Play the previous song",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -185,9 +169,7 @@
"/player/repeat/toggle": {
"post": {
"summary": "Toggle the repeat status, toggles between \"off\" , \"single\" and \"all\"",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -205,9 +187,7 @@
"/player/playpause": {
"post": {
"summary": "Start playing the media if paused, or pause the media if playing",
"tags": [
"player"
],
"tags": ["player"],
"responses": {
"200": {
"description": "Ok",
@ -225,9 +205,7 @@
"/settings/skipped-artists": {
"get": {
"summary": "get a list of artists that TIDAL Hi-Fi will skip if skipping is enabled",
"tags": [
"settings"
],
"tags": ["settings"],
"responses": {
"200": {
"description": "The list book.",
@ -243,9 +221,7 @@
},
"post": {
"summary": "Add new artists to the list of skipped artists",
"tags": [
"settings"
],
"tags": ["settings"],
"requestBody": {
"required": true,
"content": {
@ -266,9 +242,7 @@
"/settings/skipped-artists/delete": {
"post": {
"summary": "Remove artists from the list of skipped artists",
"tags": [
"settings"
],
"tags": ["settings"],
"requestBody": {
"required": true,
"content": {
@ -289,9 +263,7 @@
"/settings/skipped-artists/current": {
"post": {
"summary": "Add the current artist to the list of skipped artists",
"tags": [
"settings"
],
"tags": ["settings"],
"responses": {
"200": {
"description": "Ok"
@ -300,9 +272,7 @@
},
"delete": {
"summary": "Remove the current artist from the list of skipped artists",
"tags": [
"settings"
],
"tags": ["settings"],
"responses": {
"200": {
"description": "Ok"
@ -313,9 +283,7 @@
"/image": {
"get": {
"summary": "Get current image",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -338,9 +306,7 @@
"/play": {
"get": {
"summary": "Play the current media",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -359,9 +325,7 @@
"/favorite/toggle": {
"get": {
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -380,9 +344,7 @@
"/pause": {
"get": {
"summary": "Pause the current media",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -401,9 +363,7 @@
"/next": {
"get": {
"summary": "Play the next song",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -422,9 +382,7 @@
"/previous": {
"get": {
"summary": "Play the previous song",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -443,9 +401,7 @@
"/playpause": {
"get": {
"summary": "Toggle play/pause",
"tags": [
"legacy"
],
"tags": ["legacy"],
"deprecated": true,
"responses": {
"200": {
@ -558,10 +514,7 @@
"items": {
"type": "string"
},
"example": [
"Artist1",
"Artist2"
]
"example": ["Artist1", "Artist2"]
}
}
},
@ -579,4 +532,4 @@
"description": "The settings management API"
}
]
}
}

View File

@ -478,7 +478,7 @@
<h4>TIDAL Hi-Fi</h4>
<div class="about-section__version">
<a target="_blank" rel="noopener"
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.19.0">5.19.0</a>
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.18.2">5.18.2</a>
</div>
<div class="about-section__links">
<a target="_blank" rel="noopener" href="https://github.com/mastermindzh/tidal-hifi/"

View File

@ -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 () {