From 6d4a728455f92dc2f57c808a7a08cd64ed4414d5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 27 Aug 2021 09:44:23 -0400 Subject: [PATCH] Added annex.youtube-dl-command config This can be used to run some forks of youtube-dl. Sponsored-by: Brett Eisenberg on Patreon --- Annex/YoutubeDl.hs | 17 ++++++++++++----- CHANGELOG | 2 ++ Types/GitConfig.hs | 2 ++ doc/git-annex.mdwn | 4 ++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Annex/YoutubeDl.hs b/Annex/YoutubeDl.hs index 6c1d69ceb7..5cbc9e7f3b 100644 --- a/Annex/YoutubeDl.hs +++ b/Annex/YoutubeDl.hs @@ -1,6 +1,6 @@ {- youtube-dl integration for git-annex - - - Copyright 2017-2020 Joey Hess + - Copyright 2017-2021 Joey Hess - - Licensed under the GNU AGPL version 3 or higher. -} @@ -68,7 +68,7 @@ youtubeDl url workdir p = ifM ipAddressesUnlimited youtubeDl' :: URLString -> FilePath -> MeterUpdate -> UrlOptions -> Annex (Either String (Maybe FilePath)) youtubeDl' url workdir p uo - | supportedScheme uo url = ifM (liftIO $ inSearchPath "youtube-dl") + | supportedScheme uo url = ifM (liftIO . inSearchPath =<< youtubeDlCommand) ( runcmd >>= \case Right True -> workdirfiles >>= \case (f:[]) -> return (Right (Just f)) @@ -88,6 +88,7 @@ youtubeDl' url workdir p uo runcmd = youtubeDlMaxSize workdir >>= \case Left msg -> return (Left msg) Right maxsize -> do + cmd <- youtubeDlCommand opts <- youtubeDlOpts (dlopts ++ maxsize) oh <- mkOutputHandlerQuiet -- The size is unknown to start. Once youtube-dl @@ -97,7 +98,7 @@ youtubeDl' url workdir p uo let unknownsize = Nothing :: Maybe FileSize ok <- metered (Just p) unknownsize $ \meter meterupdate -> liftIO $ commandMeter' - parseYoutubeDlProgress oh (Just meter) meterupdate "youtube-dl" opts + parseYoutubeDlProgress oh (Just meter) meterupdate cmd opts (\pr -> pr { cwd = Just workdir }) return (Right ok) dlopts = @@ -181,7 +182,8 @@ youtubeDlCheck' :: URLString -> UrlOptions -> Annex (Either String Bool) youtubeDlCheck' url uo | supportedScheme uo url = catchMsgIO $ htmlOnly url False $ do opts <- youtubeDlOpts [ Param url, Param "--simulate" ] - liftIO $ snd <$> processTranscript "youtube-dl" (toCommand opts) Nothing + cmd <- youtubeDlCommand + liftIO $ snd <$> processTranscript cmd (toCommand opts) Nothing | otherwise = return (Right False) -- Ask youtube-dl for the filename of media in an url. @@ -218,7 +220,8 @@ youtubeDlFileNameHtmlOnly' url uo , Param "--no-warnings" , Param "--no-playlist" ] - let p = (proc "youtube-dl" (toCommand opts)) + cmd <- youtubeDlCommand + let p = (proc cmd (toCommand opts)) { std_out = CreatePipe , std_err = CreatePipe } @@ -245,6 +248,10 @@ youtubeDlOpts addopts = do opts <- map Param . annexYoutubeDlOptions <$> Annex.getGitConfig return (opts ++ addopts) +youtubeDlCommand :: Annex String +youtubeDlCommand = fromMaybe "yooutube-dl" . annexYoutubeDlCommand + <$> Annex.getGitConfig + supportedScheme :: UrlOptions -> URLString -> Bool supportedScheme uo url = case parseURIRelaxed url of Nothing -> False diff --git a/CHANGELOG b/CHANGELOG index c59603ba6b..66d577fc53 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,6 +17,8 @@ git-annex (8.20210804) UNRELEASED; urgency=medium * Fix test suite failure on Windows. * New --batch-keys option added to these commands: get, drop, move, copy, whereis + * Added annex.youtube-dl-command config. This can be used to run some + forks of youtube-dl. -- Joey Hess Tue, 03 Aug 2021 12:22:45 -0400 diff --git a/Types/GitConfig.hs b/Types/GitConfig.hs index 70c24cccfc..ab1060e060 100644 --- a/Types/GitConfig.hs +++ b/Types/GitConfig.hs @@ -95,6 +95,7 @@ data GitConfig = GitConfig , annexDebugFilter :: Maybe String , annexWebOptions :: [String] , annexYoutubeDlOptions :: [String] + , annexYoutubeDlCommand :: Maybe String , annexAriaTorrentOptions :: [String] , annexCrippledFileSystem :: Bool , annexLargeFiles :: GlobalConfigurable (Maybe String) @@ -180,6 +181,7 @@ extractGitConfig configsource r = GitConfig , annexDebugFilter = getmaybe (annexConfig "debugfilter") , annexWebOptions = getwords (annexConfig "web-options") , annexYoutubeDlOptions = getwords (annexConfig "youtube-dl-options") + , annexYoutubeDlCommand = getmaybe (annexConfig "youtube-dl-command") , annexAriaTorrentOptions = getwords (annexConfig "aria-torrent-options") , annexCrippledFileSystem = getbool (annexConfig "crippledfilesystem") False , annexLargeFiles = configurable Nothing $ diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index ad97e22fee..148d321bfd 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -1657,6 +1657,10 @@ Remotes are configured using these settings in `.git/config`. file any options that cause youtube-dl to download more than one file, or to store the file anywhere other than the current working directory. +* `annex.youtube-dl-command` + + Command to run for youtube-dl. Default is "youtube-dl". + * `annex.aria-torrent-options` Options to pass to aria2c when using it to download a torrent.