Added annex.youtube-dl-command config
authorJoey Hess <joeyh@joeyh.name>
Fri, 27 Aug 2021 13:44:23 +0000 (09:44 -0400)
committerJoey Hess <joeyh@joeyh.name>
Fri, 27 Aug 2021 13:44:23 +0000 (09:44 -0400)
This can be used to run some forks of youtube-dl.

Sponsored-by: Brett Eisenberg on Patreon
Annex/YoutubeDl.hs
CHANGELOG
Types/GitConfig.hs
doc/git-annex.mdwn

index 6c1d69ceb7e4f7481511d5e5bb0eced3e5c32ed6..5cbc9e7f3b72db5c449adf427f7c3932b64f7252 100644 (file)
@@ -1,6 +1,6 @@
 {- 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.
  -}
@@ -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
index c59603ba6b723600d4b0096b855bf74a614e3a06..66d577fc53a8b75b4e385d1c19b8e5ccad8c073d 100644 (file)
--- 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 <id@joeyh.name>  Tue, 03 Aug 2021 12:22:45 -0400
 
index 70c24cccfc8cf20785c5f7de455576a1457833ba..ab1060e060fc5d04e3514ffe8aa598344a748d29 100644 (file)
@@ -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 $
index ad97e22fee6e64569267003a28af668a3447eaea..148d321bfd536e8d2d5d24998f46044ba095054a 100644 (file)
@@ -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.