Skip to content

Commit 4904b2c

Browse files
committed
Bug fixes and improvements
1 parent b906eff commit 4904b2c

Some content is hidden

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

62 files changed

+1124
-1101
lines changed

.env.example

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ STARTUP_SERVICES="" # If you leave this blank you will get a start-up wizard
2828
# Personal media servers.
2929
# Pre-configure a server HOST.
3030
# Add USER/PASSWORD for automated login (optional).
31+
# Mark the server as LOCKED to prevent editing any of the supplied fields.
3132
# Available servers:
3233
# AIRSONIC,AMPACHE,EMBY,GONIC,JELLYFIN,NAVIDROME,SUBSONIC
3334

3435
## Example:
3536
#JELLYFIN_HOST="http://localhost:8096"
36-
#JELLYFIN_USER="example"
37-
#JELLYFIN_PASSWORD="1234"
37+
#JELLYFIN_USER=""
38+
#JELLYFIN_PASSWORD=""
39+
#JELLYFIN_LOCKED=true # Prevents logging in with alternative credentials

app/www/favicon.svg

Lines changed: 3 additions & 3 deletions
Loading

docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ services:
3838
# Personal media servers.
3939
# Pre-configure a server HOST.
4040
# Add USER/PASSWORD for automated login (optional).
41+
# Mark the server as LOCKED to prevent editing any of the supplied fields.
4142
# Available servers:
4243
# AIRSONIC,AMPACHE,EMBY,GONIC,JELLYFIN,NAVIDROME,SUBSONIC
4344

4445
## Example:
4546
#- JELLYFIN_HOST="http://localhost:8096"
4647
#- JELLYFIN_USER=""
4748
#- JELLYFIN_PASSWORD=""
49+
#- JELLYFIN_LOCKED=true # Prevents logging in with alternative credentials

package-lock.json

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

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
"license": "GPL-3.0",
2323
"dependencies": {
2424
"@ctrl/tinycolor": "^4.0.1",
25-
"@tidal-music/api": "^0.1.0",
25+
"@tidal-music/api": "^0.2.0",
2626
"@tidal-music/auth": "^1.3.3",
2727
"@tidal-music/common": "^0.1.5",
28-
"@tidal-music/player": "^0.5.0",
28+
"@tidal-music/player": "^0.7.0",
2929
"audiomotion-analyzer": "^4.0.0",
3030
"butterchurn": "^3.0.0-beta.4",
3131
"butterchurn-presets": "3.0.0-beta.4",
@@ -71,15 +71,15 @@
7171
"@types/react-dom": "^19.0.2",
7272
"@types/spotify-api": "^0.0.25",
7373
"@types/spotify-web-playback-sdk": "^0.1.15",
74-
"@types/unidecode": "^0.1.1",
74+
"@types/unidecode": "^1.1.0",
7575
"@types/wicg-file-system-access": "^2023.10.0",
7676
"@types/wicg-mediasession": "^1.1.3",
7777
"@types/youtube": "^0.1.0",
7878
"@types/youtube-player": "^5.5.6",
7979
"@typescript-eslint/eslint-plugin": "^8.1.0",
8080
"@typescript-eslint/parser": "^8.1.0",
8181
"autoprefixer": "^10.4.13",
82-
"copy-webpack-plugin": "^12.0.0",
82+
"copy-webpack-plugin": "^13.0.0",
8383
"css-loader": "^7.1.1",
8484
"dotenv": "^16.4.5",
8585
"eslint": "^8.57.0",
@@ -95,7 +95,7 @@
9595
"sass-loader": "^16.0.0",
9696
"ts-loader": "^9.3.1",
9797
"type-fest": "^4.0.0",
98-
"typescript": "^5.5.3",
98+
"typescript": "^5.8.2",
9999
"webpack": "^5.74.0",
100100
"webpack-cli": "^6.0.1"
101101
},

server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ async function handleBundleJs(res, path) {
117117
personalMediaServers[serverId] = {
118118
host,
119119
hasProxyLogin: !!(getEnv(`${SERVER_ID}_USER`) && getEnv(`${SERVER_ID}_PASSWORD`)),
120+
locked: getEnv(`${SERVER_ID}_LOCKED`) === 'true'
120121
};
121122
}
122123
});

src/components/App/useGlobalActions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default function useGlobalActions() {
1414

1515
function handleKeyDown(event: KeyboardEvent) {
1616
const isFormControl = event.target && 'form' in event.target;
17-
17+
1818
switch (event.code) {
1919
case 'Space':
2020
if (!isFormControl && preferences.spacebarTogglePlay) {
@@ -24,7 +24,7 @@ function handleKeyDown(event: KeyboardEvent) {
2424
break;
2525

2626
case 'KeyA':
27-
if (!isFormControl && event[browser.ctrlKey] && !event.shiftKey) {
27+
if (!isFormControl && event[browser.cmdKey] && !event.shiftKey) {
2828
event.preventDefault();
2929
}
3030
break;

src/components/CoverArt/thumbnails.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Thumbnail from 'types/Thumbnail';
1010
import lastfmApi from 'services/lastfm/lastfmApi';
1111
import {dispatchMediaObjectChanges} from 'services/actions/mediaObjectChanges';
1212
import {findListenByPlayedAt, getListens} from 'services/localdb/listens';
13+
import {getCoverArtFromBlob} from 'services/music-metadata';
1314
import {getCoverArtThumbnails} from 'services/musicbrainz/coverart';
1415
import youtubeApi from 'services/youtube/youtubeApi';
1516

@@ -50,6 +51,12 @@ export async function findThumbnails(
5051
return video.thumbnails;
5152
}
5253
}
54+
if (extendedSearch && item.blob) {
55+
const thumbnail = await getCoverArtFromBlob(item.blob);
56+
if (thumbnail) {
57+
return [thumbnail];
58+
}
59+
}
5360
}
5461
let thumbnails = findThumbnailsInListens(item);
5562
if (!thumbnails) {

src/components/ListView/ListView.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export interface ListViewProps<T> {
8383
onDrop?: (items: readonly T[] | readonly File[] | DataTransferItem, atIndex: number) => void;
8484
onMove?: (items: readonly T[], toIndex: number) => void;
8585
onDelete?: (items: readonly T[]) => void;
86-
onEnter?: (items: readonly T[], ctrlKey: boolean, shiftKey: boolean) => void;
86+
onEnter?: (items: readonly T[], cmdKey: boolean, shiftKey: boolean) => void;
8787
onInfo?: (items: readonly T[]) => void;
8888
onRowIndexChange?: (rowIndex: number) => void;
8989
onScrollIndexChange?: (scrollIndex: number) => void;
@@ -265,7 +265,7 @@ export default function ListView<T>({
265265
case 'Enter':
266266
event.stopPropagation();
267267
if (!event.repeat) {
268-
onEnter?.(selectedItems, event[browser.ctrlKey], event.shiftKey);
268+
onEnter?.(selectedItems, event[browser.cmdKey], event.shiftKey);
269269
}
270270
break;
271271

@@ -275,18 +275,17 @@ export default function ListView<T>({
275275
break;
276276

277277
case 'KeyI':
278-
if (event[browser.ctrlKey] && !event.shiftKey) {
278+
if (event[browser.cmdKey] && !event.shiftKey && !event.altKey) {
279279
event.preventDefault();
280280
event.stopPropagation();
281281
if (!event.repeat) {
282282
onInfo?.(selectedItems);
283283
}
284-
break;
285284
}
286285
break;
287286

288287
case 'KeyA':
289-
if (event[browser.ctrlKey] && !event.shiftKey) {
288+
if (event[browser.cmdKey] && !event.shiftKey) {
290289
event.preventDefault();
291290
event.stopPropagation();
292291
if (multiple && !event.repeat) {
@@ -305,7 +304,7 @@ export default function ListView<T>({
305304

306305
case 'Space':
307306
event.preventDefault();
308-
if (event[browser.ctrlKey]) {
307+
if (event[browser.cmdKey]) {
309308
event.stopPropagation();
310309
if (!event.repeat) {
311310
toggleSelectionAt(rowIndex); // toggle selected state
@@ -326,7 +325,7 @@ export default function ListView<T>({
326325
}
327326
if (multiple && event.shiftKey && rangeSelectionStart !== -1) {
328327
selectRange(rangeSelectionStart, nextIndex);
329-
} else if (!event[browser.ctrlKey]) {
328+
} else if (!event[browser.cmdKey]) {
330329
selectAt(nextIndex);
331330
}
332331
}
@@ -363,7 +362,7 @@ export default function ListView<T>({
363362
} else {
364363
selectRange(rangeSelectionStart, newRowIndex);
365364
}
366-
} else if (multiple && event[browser.ctrlKey]) {
365+
} else if (multiple && event[browser.cmdKey]) {
367366
toggleSelectionAt(newRowIndex);
368367
} else if (!isRowSelectedFromMouseEvent(event)) {
369368
selectAt(newRowIndex);
@@ -379,7 +378,7 @@ export default function ListView<T>({
379378
event.button === 0 &&
380379
rowIndex !== -1 &&
381380
multiple &&
382-
!event[browser.ctrlKey] &&
381+
!event[browser.cmdKey] &&
383382
!event.shiftKey
384383
) {
385384
selectAt(rowIndex);

src/components/Login/Login.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
.login-button,
66
.credentials-button {
7-
padding: 1em 3em;
7+
padding: 1em 2em;
8+
max-width: 100%;
89
font-family: var(--system-font-family);
910
font-weight: bold;
1011
white-space: normal;

0 commit comments

Comments
 (0)