diff --git a/Extensions/Browser b/Extensions/Browser index d39d3c7..f288273 160000 --- a/Extensions/Browser +++ b/Extensions/Browser @@ -1 +1 @@ -Subproject commit d39d3c79cfedf6e67d9e4540ba8416cf052e63e8 +Subproject commit f288273338b3a351cf8b6503ab7b98fc58cd980d diff --git a/src/components/AddDownloadsModal.tsx b/src/components/AddDownloadsModal.tsx index 02e6163..8c3deac 100644 --- a/src/components/AddDownloadsModal.tsx +++ b/src/components/AddDownloadsModal.tsx @@ -48,6 +48,8 @@ import { reconcileDownloadRows, refreshFailedMetadataRows, isMagnetUrl, + isAddDownloadMetadataLoading, + isAddDownloadMetadataError, isMetadataRefreshableRow, selectExactMediaSelection, updateRowIfCurrent, @@ -2273,17 +2275,19 @@ export const AddDownloadsModal = () => { ) : null} -
{t($ => $.addDownloads.torrentMetadataPending)}
diff --git a/src/utils/addDownloadMetadata.test.ts b/src/utils/addDownloadMetadata.test.ts
index 79a2cd9..7ec1a14 100644
--- a/src/utils/addDownloadMetadata.test.ts
+++ b/src/utils/addDownloadMetadata.test.ts
@@ -13,6 +13,8 @@ import {
metadataSummaryMessage,
isYouTubePlaylistUrl,
isMagnetUrl,
+ isAddDownloadMetadataLoading,
+ isAddDownloadMetadataError,
isMetadataRefreshableRow,
isRemoteTorrentUrl,
playlistFilePrefix,
@@ -545,6 +547,7 @@ describe('add download metadata workflow', () => {
expect(admitted.status).toBe('ready');
expect(canSubmitMetadataRows([admitted])).toBe(true);
expect(isMetadataRefreshableRow(admitted)).toBe(false);
+ expect(isMetadataRefreshableRow({ ...admitted, torrentMetadataStatus: 'ready' })).toBe(true);
const failed = { ...admitted, torrentMetadataStatus: 'error' as const };
const refreshed = refreshFailedMetadataRows([failed])[0];
@@ -558,6 +561,34 @@ describe('add download metadata workflow', () => {
expect(isMetadataRefreshableRow(row())).toBe(false);
});
+ it('exposes optional magnet metadata as loading while keeping transfer readiness', () => {
+ const magnet = row({
+ sourceUrl: 'magnet:?xt=urn:btih:0123456789abcdef0123456789abcdef01234567',
+ isTorrent: true,
+ torrentMetadataStatus: 'loading'
+ });
+
+ expect(magnet.status).toBe('ready');
+ expect(isAddDownloadMetadataLoading(magnet)).toBe(true);
+ expect(isAddDownloadMetadataLoading({
+ ...magnet,
+ torrentMetadataStatus: 'ready'
+ })).toBe(false);
+ expect(isAddDownloadMetadataLoading({
+ ...magnet,
+ status: 'loading',
+ torrentMetadataStatus: undefined
+ })).toBe(true);
+ expect(isAddDownloadMetadataError({
+ ...magnet,
+ torrentMetadataStatus: 'error'
+ })).toBe(true);
+ expect(isAddDownloadMetadataError({
+ ...magnet,
+ torrentMetadataStatus: 'ready'
+ })).toBe(false);
+ });
+
it('refreshes only selected metadata rows when requested by the preview action', () => {
const selected = row({
id: 'selected-magnet',
diff --git a/src/utils/addDownloadMetadata.ts b/src/utils/addDownloadMetadata.ts
index 2952543..eb833fe 100644
--- a/src/utils/addDownloadMetadata.ts
+++ b/src/utils/addDownloadMetadata.ts
@@ -120,6 +120,16 @@ export const isMagnetTorrentRow = (
row: Pick