Ability to stream a track from navidrome

This commit is contained in:
simojenki
2021-03-11 19:27:50 +11:00
parent 081819f12b
commit 9f484d5c01
11 changed files with 1087 additions and 277 deletions

View File

@@ -42,7 +42,7 @@ export class InMemoryMusicService implements MusicService {
this.users[username] == password
) {
return Promise.resolve({
authToken: JSON.stringify({ username, password }),
authToken: Buffer.from(JSON.stringify({ username, password })).toString('base64'),
userId: username,
nickname: username,
});
@@ -52,7 +52,7 @@ export class InMemoryMusicService implements MusicService {
}
login(token: string): Promise<MusicLibrary> {
const credentials = JSON.parse(token) as Credentials;
const credentials = JSON.parse(Buffer.from(token, "base64").toString("ascii")) as Credentials;
if (this.users[credentials.username] != credentials.password)
return Promise.reject("Invalid auth token");
@@ -103,7 +103,17 @@ export class InMemoryMusicService implements MusicService {
A.sort(ordString)
)
),
tracks: (albumId: string) => Promise.resolve(this.tracks.filter(it => it.album.id === albumId))
tracks: (albumId: string) => Promise.resolve(this.tracks.filter(it => it.album.id === albumId)),
track: (trackId: string) => pipe(
this.tracks.find(it => it.id === trackId),
O.fromNullable,
O.map(it => Promise.resolve(it)),
O.getOrElse(() => Promise.reject(`Failed to find track with id ${trackId}`))
),
stream: (_: {
trackId: string;
range: string | undefined;
}) => Promise.reject("unsupported operation")
});
}