From ed68a2166db215ec2cbf7667870e71d8a6c1a07e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 15 Dec 2020 01:13:21 -0400 Subject: [PATCH] importfeed: Avoid using youtube-dl when a feed does not contain an enclosure, but only a link to an url which youtube-dl does not support This is common in some feeds, which might mix some items with enclosures, with others that link to posts or whatever. Before this, it would try to use youtube-dl and fail, or if youtube-dl was not allowed, it would incorrectly complain that an url was supported by youtube-dl. --- CHANGELOG | 2 ++ Command/ImportFeed.hs | 45 +++++++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 087c1f762a..c8aa120ea7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -20,6 +20,8 @@ git-annex (8.20201128) UNRELEASED; urgency=medium * Fix reversion in 8.20201116 that made include= and exclude= in preferred/required content expressions match a path relative to the current directory, rather than the path from the top of the repository. + * importfeed: Avoid using youtube-dl when a feed does not contain an + enclosure, but only a link to an url which youtube-dl does not support. -- Joey Hess Mon, 30 Nov 2020 12:55:49 -0400 diff --git a/Command/ImportFeed.hs b/Command/ImportFeed.hs index 43882b1fd4..dc21885ecb 100644 --- a/Command/ImportFeed.hs +++ b/Command/ImportFeed.hs @@ -308,27 +308,30 @@ performDownload addunlockedmatcher opts cache todownload = case location todownl downloadmedia linkurl mediaurl mediakey | rawOption (downloadOptions opts) = downloadlink - | otherwise = do - r <- withTmpWorkDir mediakey $ \workdir -> do - dl <- youtubeDl linkurl (fromRawFilePath workdir) nullMeterUpdate - case dl of - Right (Just mediafile) -> do - let ext = case takeExtension mediafile of - [] -> ".m" - s -> s - ok <- rundownload linkurl ext $ \f -> - checkCanAdd (downloadOptions opts) f $ \canadd -> do - addWorkTree canadd addunlockedmatcher webUUID mediaurl f mediakey (Just (toRawFilePath mediafile)) - return (Just [mediakey]) - return (Just ok) - -- youtude-dl didn't support it, so - -- download it as if the link were - -- an enclosure. - Right Nothing -> Just <$> downloadlink - Left msg -> do - warning msg - return Nothing - return (fromMaybe False r) + | otherwise = ifM (youtubeDlSupported linkurl) + ( do + r <- withTmpWorkDir mediakey $ \workdir -> do + dl <- youtubeDl linkurl (fromRawFilePath workdir) nullMeterUpdate + case dl of + Right (Just mediafile) -> do + let ext = case takeExtension mediafile of + [] -> ".m" + s -> s + ok <- rundownload linkurl ext $ \f -> + checkCanAdd (downloadOptions opts) f $ \canadd -> do + addWorkTree canadd addunlockedmatcher webUUID mediaurl f mediakey (Just (toRawFilePath mediafile)) + return (Just [mediakey]) + return (Just ok) + -- youtube-dl didn't support it, so + -- download it as if the link were + -- an enclosure. + Right Nothing -> Just <$> downloadlink + Left msg -> do + warning $ linkurl ++ ": " ++ msg + return Nothing + return (fromMaybe False r) + , downloadlink + ) where downloadlink = performDownload addunlockedmatcher opts cache todownload { location = Enclosure linkurl }