Skip to content

Commit

Permalink
Added an API to add & delete entries from the skippedArtists list in …
Browse files Browse the repository at this point in the history
…the settings. fixes [#405]
  • Loading branch information
Mastermindzh committed May 20, 2024
1 parent b481108 commit d47da91
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .vscode/http/settings/skipped-artists/addArtists.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
POST /settings/skipped-artists HTTP/1.1
Host: localhost:47836
Content-Type: application/json

["abc", "def"]
2 changes: 2 additions & 0 deletions .vscode/http/settings/skipped-artists/addCurrent.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
POST /settings/skipped-artists/current HTTP/1.1
Host: localhost:47836
5 changes: 5 additions & 0 deletions .vscode/http/settings/skipped-artists/removeArtists.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
POST /settings/skipped-artists/delete HTTP/1.1
Host: localhost:47836
Content-Type: application/json

["abc", "def"]
2 changes: 2 additions & 0 deletions .vscode/http/settings/skipped-artists/removeCurrent.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DELETE /settings/skipped-artists/current HTTP/1.1
Host: localhost:47836
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down
39 changes: 39 additions & 0 deletions src/features/api/features/settings/settings.ts
Original file line number Diff line number Diff line change
@@ -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<string, string[]>(settings.skippedArtists));
});

expressApp.post("/settings/skipped-artists", (req: Request<object, object, string[]>, res) => {
addSkippedArtists(req.body);
res.sendStatus(200);
});

expressApp.post(
"/settings/skipped-artists/delete",
(req: Request<object, object, string[]>, 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);
});
};
3 changes: 3 additions & 0 deletions src/features/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@ 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";

/**
* Function to enable TIDAL Hi-Fi's express api
*/
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<string, number>(settings.apiSettings.port);
const expressInstance = expressApp.listen(port, "127.0.0.1");
Expand Down
22 changes: 22 additions & 0 deletions src/scripts/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, string[]>(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<string, string[]>(skippedArtists);
const filteredArtists = previousStoreValue.filter((value) => !artists.includes(value));

settingsStore.set(skippedArtists, filteredArtists);
};

0 comments on commit d47da91

Please sign in to comment.