@@ -2,6 +2,7 @@ import { Notice, TFile, requestUrl } from "obsidian";
22import { downloadedEpisodes } from "./store" ;
33import { DownloadPathTemplateEngine } from "./TemplateEngine" ;
44import type { Episode } from "./types/Episode" ;
5+ import { encodeUrlForRequest } from "./utility/encodeUrlForRequest" ;
56import getUrlExtension from "./utility/getUrlExtension" ;
67import getExtensionFromContentType from "./utility/getExtensionFromContentType" ;
78
@@ -16,8 +17,9 @@ async function downloadFile(
1617 onError : ( error : Error ) => void ;
1718 } > ,
1819) {
20+ const encodedUrl = encodeUrlForRequest ( url ) ;
1921 try {
20- const response = await requestUrl ( { url, method : "GET" } ) ;
22+ const response = await requestUrl ( { url : encodedUrl , method : "GET" } ) ;
2123
2224 if ( response . status !== 200 ) {
2325 throw new Error ( "Could not download episode." ) ;
@@ -36,7 +38,7 @@ async function downloadFile(
3638 } ) ,
3739 contentLength,
3840 receivedLength : contentLength ,
39- responseUrl : url ,
41+ responseUrl : encodedUrl ,
4042 } ;
4143 } catch ( error : unknown ) {
4244 const err = new Error (
@@ -229,16 +231,21 @@ export async function downloadEpisode(
229231}
230232
231233async function getFileExtension ( url : string ) : Promise < string > {
232- const urlExtension = getUrlExtension ( url ) ;
234+ const encodedUrl = encodeUrlForRequest ( url ) ;
235+ const urlExtension = getUrlExtension ( encodedUrl ) ;
233236 if ( urlExtension ) return urlExtension ;
234237
235238 // If URL doesn't have an extension, fetch headers to determine content type
236- const response = await fetch ( url , { method : "HEAD" } ) ;
237- const contentType = response . headers . get ( "content-type" ) ;
239+ try {
240+ const response = await fetch ( encodedUrl , { method : "HEAD" } ) ;
241+ const contentType = response . headers . get ( "content-type" ) ;
238242
239- const extensionFromContentType = getExtensionFromContentType ( contentType ) ;
240- if ( extensionFromContentType ) {
241- return extensionFromContentType ;
243+ const extensionFromContentType = getExtensionFromContentType ( contentType ) ;
244+ if ( extensionFromContentType ) {
245+ return extensionFromContentType ;
246+ }
247+ } catch ( error ) {
248+ console . error ( `HEAD request failed for ${ encodedUrl } ` , error ) ;
242249 }
243250
244251 // Default to mp3 if we can't determine the type
0 commit comments