{- youtube-dl integration for git-annex
-
- - Copyright 2017-2020 Joey Hess <id@joeyh.name>
+ - Copyright 2017-2021 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
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))
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
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 =
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.
, 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
}
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
* 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 <id@joeyh.name> Tue, 03 Aug 2021 12:22:45 -0400
, annexDebugFilter :: Maybe String
, annexWebOptions :: [String]
, annexYoutubeDlOptions :: [String]
+ , annexYoutubeDlCommand :: Maybe String
, annexAriaTorrentOptions :: [String]
, annexCrippledFileSystem :: Bool
, annexLargeFiles :: GlobalConfigurable (Maybe String)
, 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 $
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.