Skip to content

Commit dd6843c

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 4bb4cb7 + ec68ab3 commit dd6843c

8 files changed

Lines changed: 290 additions & 59 deletions

File tree

manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"id": "podnotes",
33
"name": "PodNotes",
4-
"version": "2.14.1",
4+
"version": "2.14.2",
55
"minAppVersion": "0.15.9",
66
"description": "Helps you write notes on podcasts.",
77
"author": "Christian B. B. Houmann",
88
"authorUrl": "https://bagerbach.com",
99
"fundingUrl": "https://buymeacoffee.com/chhoumann",
1010
"isDesktopOnly": false
11-
}
11+
}

package-lock.json

Lines changed: 11 additions & 27 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": "podnotes",
3-
"version": "2.14.1",
3+
"version": "2.14.2",
44
"description": "Helps you write notes on podcasts.",
55
"main": "main.js",
66
"scripts": {

src/downloadEpisode.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DownloadPathTemplateEngine } from "./TemplateEngine";
44
import type { Episode } from "./types/Episode";
55
import type { LocalEpisode } from "./types/LocalEpisode";
66
import { isLocalFile } from "./utility/isLocalFile";
7+
import { encodeUrlForRequest } from "./utility/encodeUrlForRequest";
78
import getUrlExtension from "./utility/getUrlExtension";
89
import getExtensionFromContentType from "./utility/getExtensionFromContentType";
910

@@ -18,8 +19,9 @@ async function downloadFile(
1819
onError: (error: Error) => void;
1920
}>,
2021
) {
22+
const encodedUrl = encodeUrlForRequest(url);
2123
try {
22-
const response = await requestUrl({ url, method: "GET" });
24+
const response = await requestUrl({ url: encodedUrl, method: "GET" });
2325

2426
if (response.status !== 200) {
2527
throw new Error("Could not download episode.");
@@ -38,7 +40,7 @@ async function downloadFile(
3840
}),
3941
contentLength,
4042
receivedLength: contentLength,
41-
responseUrl: url,
43+
responseUrl: encodedUrl,
4244
};
4345
} catch (error: unknown) {
4446
const err = new Error(
@@ -292,16 +294,21 @@ export async function downloadEpisode(
292294
}
293295

294296
async function getFileExtension(url: string): Promise<string> {
295-
const urlExtension = getUrlExtension(url);
297+
const encodedUrl = encodeUrlForRequest(url);
298+
const urlExtension = getUrlExtension(encodedUrl);
296299
if (urlExtension) return urlExtension;
297300

298301
// If URL doesn't have an extension, fetch headers to determine content type
299-
const response = await fetch(url, { method: "HEAD" });
300-
const contentType = response.headers.get("content-type");
302+
try {
303+
const response = await fetch(encodedUrl, { method: "HEAD" });
304+
const contentType = response.headers.get("content-type");
301305

302-
const extensionFromContentType = getExtensionFromContentType(contentType);
303-
if (extensionFromContentType) {
304-
return extensionFromContentType;
306+
const extensionFromContentType = getExtensionFromContentType(contentType);
307+
if (extensionFromContentType) {
308+
return extensionFromContentType;
309+
}
310+
} catch (error) {
311+
console.error(`HEAD request failed for ${encodedUrl}`, error);
305312
}
306313

307314
// Default to mp3 if we can't determine the type

0 commit comments

Comments
 (0)