Skip to content

Commit 19250ef

Browse files
committed
Internet Radio (disabled for now)
1 parent 4904b2c commit 19250ef

File tree

107 files changed

+3512
-692
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+3512
-692
lines changed

.vscode/settings.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"airsonic",
44
"albumartist",
55
"albumid",
6+
"amazingtunes",
67
"ambientvideo",
78
"ambilight",
89
"Ampache",
@@ -101,10 +102,13 @@
101102
"oembed",
102103
"oliveoil",
103104
"Omni",
105+
"onlineradiobox",
104106
"otherworldy",
105107
"Pageable",
106108
"palepink",
107109
"phonk",
110+
"Pinnable",
111+
"pinnables",
108112
"playcount",
109113
"Playhead",
110114
"playlistsroot",
@@ -118,6 +122,7 @@
118122
"previoustrack",
119123
"purplelicious",
120124
"quasicrystal",
125+
"radiojar",
121126
"ratelimit",
122127
"realname",
123128
"recenttracks",
@@ -145,6 +150,7 @@
145150
"skyblue",
146151
"soundcloud",
147152
"spacebar",
153+
"spinitron",
148154
"splitcomplement",
149155
"spotify",
150156
"spotifyviz",

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ LABEL org.opencontainers.image.title="ampcast" \
55
org.opencontainers.image.description="A music player inspired by Winamp" \
66
org.opencontainers.image.url="https://ampcast.app" \
77
org.opencontainers.image.source="https://github.com/rekkyrosso/ampcast" \
8-
org.opencontainers.image.version="0.9.16" \
8+
org.opencontainers.image.version="0.9.17" \
99
org.opencontainers.image.licenses="GPLv3"
1010

1111
WORKDIR /app

app/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "ampcast-app",
33
"productName": "ampcast",
4-
"version": "0.9.16",
4+
"version": "0.9.17",
55
"description": "Ampcast music player",
66
"homepage": "https://ampcast.app",
77
"repository": {

package-lock.json

Lines changed: 95 additions & 94 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ampcast",
3-
"version": "0.9.16",
3+
"version": "0.9.17",
44
"description": "Ampcast music player",
55
"homepage": "https://ampcast.app",
66
"author": {

src/components/Actions/Actions.tsx

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React, {useCallback} from 'react';
22
import Action from 'types/Action';
3-
import ItemType from 'types/ItemType';
43
import LibraryAction from 'types/LibraryAction';
54
import MediaObject from 'types/MediaObject';
65
import MediaService from 'types/MediaService';
@@ -26,8 +25,8 @@ const defaultActionIcons: Record<LibraryAction, IconName> = {
2625
};
2726

2827
const defaultActionLabels: Record<LibraryAction, string> = {
29-
[Action.AddToLibrary]: 'Add to library',
30-
[Action.RemoveFromLibrary]: 'Remove from library',
28+
[Action.AddToLibrary]: 'Add to Library',
29+
[Action.RemoveFromLibrary]: 'Remove from Library',
3130
[Action.Rate]: 'Rate',
3231
[Action.Like]: 'Like',
3332
[Action.Unlike]: 'Unlike',
@@ -38,12 +37,10 @@ export default function Actions({item, inline}: ActionsProps) {
3837
const tabIndex = inline ? -1 : undefined;
3938

4039
const togglePin = useCallback(async () => {
41-
if (item.itemType === ItemType.Playlist) {
42-
if (item.isPinned) {
43-
await performAction(Action.Unpin, [item]);
44-
} else {
45-
await performAction(Action.Pin, [item]);
46-
}
40+
if (item.isPinned) {
41+
await performAction(Action.Unpin, [item]);
42+
} else {
43+
await performAction(Action.Pin, [item]);
4744
}
4845
}, [item]);
4946

@@ -93,7 +90,7 @@ export default function Actions({item, inline}: ActionsProps) {
9390
/>
9491
) : null}
9592

96-
{item.itemType === ItemType.Playlist && service?.createSourceFromPin ? (
93+
{service?.canPin?.(item, inline) ? (
9794
<IconButton
9895
icon={item.isPinned ? 'pin-fill' : 'pin'}
9996
title={item.isPinned ? 'Unpin' : 'Pin to sidebar'}

src/components/Actions/performAction.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import ItemType from 'types/ItemType';
33
import LibraryAction from 'types/LibraryAction';
44
import MediaItem from 'types/MediaItem';
55
import MediaObject from 'types/MediaObject';
6-
import MediaPlaylist from 'types/MediaPlaylist';
6+
import {Pinnable} from 'types/Pin';
77
import PlayAction from 'types/PlayAction';
88
import actionsStore from 'services/actions/actionsStore';
99
import mediaPlayback from 'services/mediaPlayback';
@@ -28,8 +28,6 @@ export default async function performAction<T extends MediaObject>(
2828
return;
2929
}
3030

31-
const itemType = item.itemType;
32-
3331
switch (action) {
3432
case Action.PlayNow:
3533
case Action.PlayNext:
@@ -46,15 +44,11 @@ export default async function performAction<T extends MediaObject>(
4644
break;
4745

4846
case Action.Pin:
49-
if (itemType === ItemType.Playlist) {
50-
await pinStore.pin(items as readonly MediaPlaylist[]);
51-
}
47+
await pinStore.pin(items as readonly Pinnable[]);
5248
break;
5349

5450
case Action.Unpin:
55-
if (itemType === ItemType.Playlist) {
56-
await pinStore.unpin(items as readonly MediaPlaylist[]);
57-
}
51+
await pinStore.unpin(items as readonly Pinnable[]);
5852
break;
5953

6054
case Action.Info:

src/components/Actions/usePlaylistItemsByService.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,16 @@ export default function usePlaylistItemsByService<T extends MediaItem>(
1818
} else {
1919
const listenbrainz = itemsByService[index];
2020
const items = listenbrainz.items;
21-
const subscription = from(musicbrainzApi.addMetadata(items, false)).subscribe(
22-
(items) => {
23-
items = items.filter((item) => item.recording_mbid);
24-
if (items.length === 0) {
25-
itemsByService.splice(index, 1);
26-
} else {
27-
const service = listenbrainz.service;
28-
itemsByService[index] = {service, items};
29-
}
30-
setItemsByService(itemsByService);
21+
const subscription = from(musicbrainzApi.addMetadata(items)).subscribe((items) => {
22+
items = items.filter((item) => item.recording_mbid);
23+
if (items.length === 0) {
24+
itemsByService.splice(index, 1);
25+
} else {
26+
const service = listenbrainz.service;
27+
itemsByService[index] = {service, items};
3128
}
32-
);
29+
setItemsByService(itemsByService);
30+
});
3331
return () => subscription.unsubscribe();
3432
}
3533
}, [items]);

src/components/App/useMediaSession.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {MAX_DURATION} from 'services/constants';
55
import {pause, play, seek, stop, prev, next} from 'services/mediaPlayback';
66
import {observePlaybackState} from 'services/mediaPlayback/playback';
77
import miniPlayer from 'services/mediaPlayback/miniPlayer';
8-
import {getThumbnailUrl} from 'components/CoverArt';
8+
import {getThumbnailUrl} from 'services/metadata';
99
import useObservable from 'hooks/useObservable';
1010

1111
const logger = new Logger('useMediaSession');

0 commit comments

Comments
 (0)