From b481108af1c2f7f8a1dec717874dc608950c6452 Mon Sep 17 00:00:00 2001 From: Rick van Lieshout Date: Mon, 20 May 2024 12:18:52 +0200 Subject: [PATCH 1/7] fix: fixes #403 - cannot read shuffle of undefined error --- CHANGELOG.md | 4 ++++ src/models/mediaInfo.ts | 2 +- src/scripts/mediaInfo.ts | 10 ++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c9d55d..f19db6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ 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). +## [next] + +- Fixed [#403](https://github.com/Mastermindzh/tidal-hifi/issues/403) "cannot read shuffle of undefined" error + ## [5.12.0] - Added Shuffle and Repeat state to API response - By [ThatGravyBoat](https://github.com/ThatGravyBoat) diff --git a/src/models/mediaInfo.ts b/src/models/mediaInfo.ts index 1db49fe..c2a59eb 100644 --- a/src/models/mediaInfo.ts +++ b/src/models/mediaInfo.ts @@ -14,5 +14,5 @@ export interface MediaInfo { durationInSeconds?: number; image: string; favorite: boolean; - player: MediaPlayerInfo; + player?: MediaPlayerInfo; } diff --git a/src/scripts/mediaInfo.ts b/src/scripts/mediaInfo.ts index fba1973..2fe4127 100644 --- a/src/scripts/mediaInfo.ts +++ b/src/scripts/mediaInfo.ts @@ -20,7 +20,7 @@ export const mediaInfo = { status: MediaStatus.paused as string, shuffle: false, repeat: RepeatState.off as string, - } + }, }; export const updateMediaInfo = (arg: MediaInfo) => { @@ -37,9 +37,11 @@ export const updateMediaInfo = (arg: MediaInfo) => { mediaInfo.image = propOrDefault(arg.image); mediaInfo.favorite = arg.favorite; - mediaInfo.player.status = propOrDefault(arg.player?.status); - mediaInfo.player.shuffle = arg.player.shuffle; - mediaInfo.player.repeat = propOrDefault(arg.player?.repeat); + mediaInfo.player = { + status: propOrDefault(arg.player?.status), + shuffle: arg.player?.shuffle ?? false, + repeat: propOrDefault(arg.player?.repeat), + }; }; /** From d47da91e930f44b62d3728b3c4d66f9cc6eaf2ab Mon Sep 17 00:00:00 2001 From: Rick van Lieshout Date: Mon, 20 May 2024 14:24:47 +0200 Subject: [PATCH 2/7] Added an API to add & delete entries from the skippedArtists list in the settings. fixes [#405] --- .../settings/skipped-artists/addArtists.http | 5 +++ .../settings/skipped-artists/addCurrent.http | 2 + .../skipped-artists/removeArtists.http | 5 +++ .../skipped-artists/removeCurrent.http | 2 + CHANGELOG.md | 6 +++ .../api/features/settings/settings.ts | 39 +++++++++++++++++++ src/features/api/index.ts | 3 ++ src/scripts/settings.ts | 22 +++++++++++ 8 files changed, 84 insertions(+) create mode 100644 .vscode/http/settings/skipped-artists/addArtists.http create mode 100644 .vscode/http/settings/skipped-artists/addCurrent.http create mode 100644 .vscode/http/settings/skipped-artists/removeArtists.http create mode 100644 .vscode/http/settings/skipped-artists/removeCurrent.http create mode 100644 src/features/api/features/settings/settings.ts diff --git a/.vscode/http/settings/skipped-artists/addArtists.http b/.vscode/http/settings/skipped-artists/addArtists.http new file mode 100644 index 0000000..73f3cd2 --- /dev/null +++ b/.vscode/http/settings/skipped-artists/addArtists.http @@ -0,0 +1,5 @@ +POST /settings/skipped-artists HTTP/1.1 +Host: localhost:47836 +Content-Type: application/json + +["abc", "def"] diff --git a/.vscode/http/settings/skipped-artists/addCurrent.http b/.vscode/http/settings/skipped-artists/addCurrent.http new file mode 100644 index 0000000..7f36ac0 --- /dev/null +++ b/.vscode/http/settings/skipped-artists/addCurrent.http @@ -0,0 +1,2 @@ +POST /settings/skipped-artists/current HTTP/1.1 +Host: localhost:47836 diff --git a/.vscode/http/settings/skipped-artists/removeArtists.http b/.vscode/http/settings/skipped-artists/removeArtists.http new file mode 100644 index 0000000..fcf415b --- /dev/null +++ b/.vscode/http/settings/skipped-artists/removeArtists.http @@ -0,0 +1,5 @@ +POST /settings/skipped-artists/delete HTTP/1.1 +Host: localhost:47836 +Content-Type: application/json + +["abc", "def"] diff --git a/.vscode/http/settings/skipped-artists/removeCurrent.http b/.vscode/http/settings/skipped-artists/removeCurrent.http new file mode 100644 index 0000000..c1634f0 --- /dev/null +++ b/.vscode/http/settings/skipped-artists/removeCurrent.http @@ -0,0 +1,2 @@ +DELETE /settings/skipped-artists/current HTTP/1.1 +Host: localhost:47836 diff --git a/CHANGELOG.md b/CHANGELOG.md index f19db6e..f6d0845 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [next] - Fixed [#403](https://github.com/Mastermindzh/tidal-hifi/issues/403) "cannot read shuffle of undefined" error +- Added an API to add & delete entries from the skippedArtists list in the settings. fixes [#405](https://github.com/Mastermindzh/tidal-hifi/issues/405) + - `GET /settings/skipped-artists` -> get list of skipped artists + - `POST /settings/skipped-artists` -> add to the list of skipped artists + - `POST /settings/skipped-artists/delete` -> delete from the list of skipped artists + - `POST /settings/skipped-artists/current` -> skip the current artist + - `DELETE /settings/skipped-artists/current` -> delete the current artist from the skip list ## [5.12.0] diff --git a/src/features/api/features/settings/settings.ts b/src/features/api/features/settings/settings.ts new file mode 100644 index 0000000..ea3c592 --- /dev/null +++ b/src/features/api/features/settings/settings.ts @@ -0,0 +1,39 @@ +import { Request, Router } from "express"; +import { settings } from "../../../../constants/settings"; +import { mediaInfo } from "../../../../scripts/mediaInfo"; +import { + addSkippedArtists, + removeSkippedArtists, + settingsStore, +} from "../../../../scripts/settings"; +import { BrowserWindow } from "electron"; +import { globalEvents } from "../../../../constants/globalEvents"; + +export const addSettingsAPI = (expressApp: Router, mainWindow: BrowserWindow) => { + expressApp.get("/settings/skipped-artists", (req, res) => { + res.json(settingsStore.get(settings.skippedArtists)); + }); + + expressApp.post("/settings/skipped-artists", (req: Request, res) => { + addSkippedArtists(req.body); + res.sendStatus(200); + }); + + expressApp.post( + "/settings/skipped-artists/delete", + (req: Request, res) => { + removeSkippedArtists(req.body); + res.sendStatus(200); + } + ); + + expressApp.post("/settings/skipped-artists/current", (req, res) => { + addSkippedArtists([mediaInfo.artists]); + mainWindow.webContents.send("globalEvent", globalEvents.next); + res.sendStatus(200); + }); + expressApp.delete("/settings/skipped-artists/current", (req, res) => { + removeSkippedArtists([mediaInfo.artists]); + res.sendStatus(200); + }); +}; diff --git a/src/features/api/index.ts b/src/features/api/index.ts index a2f1547..bc47373 100644 --- a/src/features/api/index.ts +++ b/src/features/api/index.ts @@ -4,6 +4,7 @@ import { settings } from "../../constants/settings"; import { settingsStore } from "../../scripts/settings"; import { addCurrentInfo } from "./features/current"; import { addPlaybackControl } from "./features/player"; +import { addSettingsAPI } from "./features/settings/settings"; import { addLegacyApi } from "./legacy"; /** @@ -11,12 +12,14 @@ import { addLegacyApi } from "./legacy"; */ export const startApi = (mainWindow: BrowserWindow) => { const expressApp = express(); + expressApp.use(express.json()); expressApp.get("/", (req, res) => res.send("Hello World!")); // add features addLegacyApi(expressApp, mainWindow); addPlaybackControl(expressApp, mainWindow); addCurrentInfo(expressApp); + addSettingsAPI(expressApp, mainWindow); const port = settingsStore.get(settings.apiSettings.port); const expressInstance = expressApp.listen(port, "127.0.0.1"); diff --git a/src/scripts/settings.ts b/src/scripts/settings.ts index 7c0536d..f77b591 100644 --- a/src/scripts/settings.ts +++ b/src/scripts/settings.ts @@ -159,3 +159,25 @@ export const hideSettingsWindow = function () { export const closeSettingsWindow = function () { settingsWindow = null; }; + +/** + * add artists to the list of skipped artists + * @param artists list of artists to append + */ +export const addSkippedArtists = (artists: string[]) => { + const { skippedArtists } = settings; + const previousStoreValue = settingsStore.get(skippedArtists); + settingsStore.set(skippedArtists, Array.from(new Set([...previousStoreValue, ...artists]))); +}; + +/** + * Remove artists from the list of skipped artists + * @param artists list of artists to remove + */ +export const removeSkippedArtists = (artists: string[]) => { + const { skippedArtists } = settings; + const previousStoreValue = settingsStore.get(skippedArtists); + const filteredArtists = previousStoreValue.filter((value) => !artists.includes(value)); + + settingsStore.set(skippedArtists, filteredArtists); +}; From 7c6831c771c8a1803cef131d57d070ea3f424f3d Mon Sep 17 00:00:00 2001 From: Rick van Lieshout Date: Mon, 20 May 2024 15:23:26 +0200 Subject: [PATCH 3/7] added swagger docs --- CHANGELOG.md | 2 + README.md | 2 +- docs/images/swagger.png | Bin 0 -> 90604 bytes package-lock.json | 254 ++++++++++++++++-- package.json | 8 +- .../api/features/settings/settings.ts | 82 ++++++ src/features/api/index.ts | 37 ++- 7 files changed, 363 insertions(+), 22 deletions(-) create mode 100644 docs/images/swagger.png diff --git a/CHANGELOG.md b/CHANGELOG.md index f6d0845..31b684b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `POST /settings/skipped-artists/delete` -> delete from the list of skipped artists - `POST /settings/skipped-artists/current` -> skip the current artist - `DELETE /settings/skipped-artists/current` -> delete the current artist from the skip list + - Added Swagger documentation to the new endpoints: + ![picture of swagger documentation](./docs/images/swagger.png) ## [5.12.0] diff --git a/README.md b/README.md index 70e6dae..eb3083c 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ The web version of [listen.tidal.com](https://listen.tidal.com) running in elect - Custom hotkeys ([source](https://defkey.com/tidal-desktop-shortcuts)) - Better icons thanks to [Papirus-icon-theme](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme/) - [Settings feature](./docs/images/settings.png) to disable certain functionality. (`ctrl+=` or `ctrl+0`) -- API for status and playback +- API for status, playback and settings (see the [/docs](http://localhost:47836/docs/) route) - Disabled audio & visual ads, unlocked lyrics, suggested track, track info, and unlimited skips thanks to uBlockOrigin custom filters ([source](https://github.com/uBlockOrigin/uAssets/issues/17495)) - AlbumArt in integrations ([best-effort](https://github.com/Mastermindzh/tidal-hifi/pull/88#pullrequestreview-840814847)) - Custom [integrations](#integrations) diff --git a/docs/images/swagger.png b/docs/images/swagger.png new file mode 100644 index 0000000000000000000000000000000000000000..76bd9f7148d4517e344474bd99239cedb47ab072 GIT binary patch literal 90604 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.10.0" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^5.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -831,6 +875,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" + }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -1101,8 +1150,7 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/keyv": { "version": "3.1.4", @@ -1202,6 +1250,21 @@ "@types/node": "*" } }, + "node_modules/@types/swagger-jsdoc": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.4.tgz", + "integrity": "sha512-W+Xw5epcOZrF/AooUM/PccNMSAFOKWZA5dasNyMujTwsBkU74njSJBpvCCJhHAJ95XRMzQrrW844Btu0uoetwQ==" + }, + "node_modules/@types/swagger-ui-express": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz", + "integrity": "sha512-UVSiGYXa5IzdJJG3hrc86e8KdZWLYxyEsVoUI4iPXc7CO4VZ3AfNP8d/8+hrDRIqz+HAaSMtZSqAsF3Nq2X/Dg==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/serve-static": "*" + } + }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", @@ -1788,8 +1851,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -1915,8 +1977,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2261,6 +2322,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2498,8 +2564,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -3131,7 +3196,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -3716,7 +3780,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4184,8 +4247,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -4852,7 +4914,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5145,7 +5206,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5391,6 +5451,16 @@ "dev": true, "peer": true }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -5404,6 +5474,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -6076,6 +6151,12 @@ "node": ">=6" } }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "peer": true + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -6190,7 +6271,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7832,6 +7912,102 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/swagger-jsdoc": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz", + "integrity": "sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==", + "dependencies": { + "commander": "6.2.0", + "doctrine": "3.0.0", + "glob": "7.1.6", + "lodash.mergewith": "^4.6.2", + "swagger-parser": "^10.0.3", + "yaml": "2.0.0-1" + }, + "bin": { + "swagger-jsdoc": "bin/swagger-jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/swagger-jsdoc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/swagger-jsdoc/node_modules/commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-jsdoc/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-jsdoc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", + "dependencies": { + "@apidevtools/swagger-parser": "10.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.17.10", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.10.tgz", + "integrity": "sha512-fp8SYeEK216KS1/noDvursUOGojEbkvtckOpOmAGZUjlx/ma7VLD2PLQwyermjlzFrlHI5uCt1V+M1C3qBvRyQ==" + }, + "node_modules/swagger-ui-express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz", + "integrity": "sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, "node_modules/table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -8279,6 +8455,14 @@ "uuid": "bin/uuid" } }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8463,6 +8647,14 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yaml": { + "version": "2.0.0-1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz", + "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==", + "engines": { + "node": ">= 6" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -8511,6 +8703,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/zip-stream": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", @@ -8564,4 +8784,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 2a48818..6cd9c1d 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "license": "MIT", "dependencies": { "@electron/remote": "^2.1.2", + "@types/swagger-jsdoc": "^6.0.4", "axios": "^1.6.8", "discord-rpc": "^4.0.1", "electron-store": "^8.2.0", @@ -47,7 +48,9 @@ "hotkeys-js": "^3.13.7", "mpris-service": "^2.1.2", "request": "^2.88.2", - "sass": "^1.75.0" + "sass": "^1.75.0", + "swagger-jsdoc": "^6.2.8", + "swagger-ui-express": "^5.0.0" }, "devDependencies": { "@mastermindzh/prettier-config": "^1.0.0", @@ -55,6 +58,7 @@ "@types/express": "^4.17.21", "@types/node": "^20.10.6", "@types/request": "^2.48.12", + "@types/swagger-ui-express": "^4.1.6", "@typescript-eslint/eslint-plugin": "^6.18.0", "@typescript-eslint/parser": "^6.18.0", "copyfiles": "^2.4.1", @@ -73,4 +77,4 @@ "typescript": "^5.3.3" }, "prettier": "@mastermindzh/prettier-config" -} \ No newline at end of file +} diff --git a/src/features/api/features/settings/settings.ts b/src/features/api/features/settings/settings.ts index ea3c592..a9fa6cf 100644 --- a/src/features/api/features/settings/settings.ts +++ b/src/features/api/features/settings/settings.ts @@ -9,16 +9,78 @@ import { import { BrowserWindow } from "electron"; import { globalEvents } from "../../../../constants/globalEvents"; +/** + * @swagger + * tags: + * name: settings + * description: The settings management API + * components: + * schemas: + * StringArray: + * type: array + * items: + * type: string + * example: ["Artist1", "Artist2"] + * + * @param expressApp + * @param mainWindow + */ export const addSettingsAPI = (expressApp: Router, mainWindow: BrowserWindow) => { + /** + * @swagger + * /settings/skipped-artists: + * get: + * summary: get a list of artists that TIDAL Hi-Fi will skip if skipping is enabled + * tags: [settings] + * responses: + * 200: + * description: The list book. + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/StringArray' + */ expressApp.get("/settings/skipped-artists", (req, res) => { res.json(settingsStore.get(settings.skippedArtists)); }); + /** + * @swagger + * /settings/skipped-artists: + * post: + * summary: Add new artists to the list of skipped artists + * tags: [settings] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/StringArray' + * responses: + * 200: + * description: Ok + */ expressApp.post("/settings/skipped-artists", (req: Request, res) => { addSkippedArtists(req.body); res.sendStatus(200); }); + /** + * @swagger + * /settings/skipped-artists/delete: + * post: + * summary: Remove artists from the list of skipped artists + * tags: [settings] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/StringArray' + * responses: + * 200: + * description: Ok + */ expressApp.post( "/settings/skipped-artists/delete", (req: Request, res) => { @@ -27,11 +89,31 @@ export const addSettingsAPI = (expressApp: Router, mainWindow: BrowserWindow) => } ); + /** + * @swagger + * /settings/skipped-artists/current: + * post: + * summary: Add the current artist to the list of skipped artists + * tags: [settings] + * responses: + * 200: + * description: Ok + */ expressApp.post("/settings/skipped-artists/current", (req, res) => { addSkippedArtists([mediaInfo.artists]); mainWindow.webContents.send("globalEvent", globalEvents.next); res.sendStatus(200); }); + /** + * @swagger + * /settings/skipped-artists/current: + * delete: + * summary: Remove the current artist from the list of skipped artists + * tags: [settings] + * responses: + * 200: + * description: Ok + */ expressApp.delete("/settings/skipped-artists/current", (req, res) => { removeSkippedArtists([mediaInfo.artists]); res.sendStatus(200); diff --git a/src/features/api/index.ts b/src/features/api/index.ts index bc47373..f63cd27 100644 --- a/src/features/api/index.ts +++ b/src/features/api/index.ts @@ -1,7 +1,9 @@ import { BrowserWindow, dialog } from "electron"; import express from "express"; -import { settings } from "../../constants/settings"; +import swaggerjsdoc from "swagger-jsdoc"; +import swaggerUi from "swagger-ui-express"; import { settingsStore } from "../../scripts/settings"; +import { settings } from "./../../constants/settings"; import { addCurrentInfo } from "./features/current"; import { addPlaybackControl } from "./features/player"; import { addSettingsAPI } from "./features/settings/settings"; @@ -11,9 +13,41 @@ import { addLegacyApi } from "./legacy"; * Function to enable TIDAL Hi-Fi's express api */ export const startApi = (mainWindow: BrowserWindow) => { + const port = settingsStore.get(settings.apiSettings.port); + const specs = swaggerjsdoc({ + definition: { + openapi: "3.1.0", + info: { + title: "TIDAL Hi-Fi API", + version: "5.12.0", + description: "", + license: { + name: "MIT", + url: "https://github.com/Mastermindzh/tidal-hifi/blob/master/LICENSE", + }, + contact: { + name: "Rick van Lieshout", + url: "https://www.rickvanlieshout.com", + }, + }, + servers: [ + { + url: `http://localhost:${port}`, + }, + ], + externalDocs: { + description: "swagger.json", + url: "swagger.json", + }, + }, + apis: ["**/*.ts"], + }); + const expressApp = express(); expressApp.use(express.json()); + expressApp.use("/docs", swaggerUi.serve, swaggerUi.setup(specs)); expressApp.get("/", (req, res) => res.send("Hello World!")); + expressApp.get("/swagger.json", (req, res) => res.json(specs)); // add features addLegacyApi(expressApp, mainWindow); @@ -21,7 +55,6 @@ export const startApi = (mainWindow: BrowserWindow) => { addCurrentInfo(expressApp); addSettingsAPI(expressApp, mainWindow); - const port = settingsStore.get(settings.apiSettings.port); const expressInstance = expressApp.listen(port, "127.0.0.1"); expressInstance.on("error", function (e: { code: string }) { let message = e.code; From 1edc6a1b2b5ac855cc1482c490ba3d79a7776bd3 Mon Sep 17 00:00:00 2001 From: Rick van Lieshout Date: Mon, 20 May 2024 15:24:15 +0200 Subject: [PATCH 4/7] chore: versioning --- CHANGELOG.md | 2 +- package-lock.json | 6 +++--- package.json | 4 ++-- src/features/api/index.ts | 2 +- src/pages/settings/settings.html | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31b684b..b07ddf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ 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). -## [next] +## [5.13.0] - Fixed [#403](https://github.com/Mastermindzh/tidal-hifi/issues/403) "cannot read shuffle of undefined" error - Added an API to add & delete entries from the skippedArtists list in the settings. fixes [#405](https://github.com/Mastermindzh/tidal-hifi/issues/405) diff --git a/package-lock.json b/package-lock.json index 7d07ed3..4096a42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tidal-hifi", - "version": "5.12.0", + "version": "5.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tidal-hifi", - "version": "5.12.0", + "version": "5.13.0", "license": "MIT", "dependencies": { "@electron/remote": "^2.1.2", @@ -8784,4 +8784,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 6cd9c1d..957575f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tidal-hifi", - "version": "5.12.0", + "version": "5.13.0", "description": "Tidal on Electron with widevine(hifi) support", "main": "ts-dist/main.js", "scripts": { @@ -77,4 +77,4 @@ "typescript": "^5.3.3" }, "prettier": "@mastermindzh/prettier-config" -} +} \ No newline at end of file diff --git a/src/features/api/index.ts b/src/features/api/index.ts index f63cd27..5272ed8 100644 --- a/src/features/api/index.ts +++ b/src/features/api/index.ts @@ -19,7 +19,7 @@ export const startApi = (mainWindow: BrowserWindow) => { openapi: "3.1.0", info: { title: "TIDAL Hi-Fi API", - version: "5.12.0", + version: "5.13.0", description: "", license: { name: "MIT", diff --git a/src/pages/settings/settings.html b/src/pages/settings/settings.html index fe20bbb..d64784e 100644 --- a/src/pages/settings/settings.html +++ b/src/pages/settings/settings.html @@ -433,7 +433,7 @@

TIDAL Hi-Fi

5.12.0 + href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.13.0">5.13.0