diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-12-28 11:46:39 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-12-28 11:46:39 -0400 |
commit | 29b1e4c69e96b1dab8ce8ae0579e988b17d33325 (patch) | |
tree | 92a28949a44f6af864de09bab74520f244e4c06b /Command | |
parent | 0bf7850898db15cca00b1d7ea6056a680aa42930 (diff) |
Added inprogress command for accessing files as they are being downloaded.
Chose to make this only handle files actively being downloaded, not temp
files for downloads that were interrupted or files that have been fully
downloaded.
This commit was sponsored by Ole-Morten Duesund on Patreon.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Inprogress.hs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Command/Inprogress.hs b/Command/Inprogress.hs new file mode 100644 index 000000000..f1a8345ae --- /dev/null +++ b/Command/Inprogress.hs @@ -0,0 +1,60 @@ +{- git-annex command + - + - Copyright 2017 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.Inprogress where + +import Command +import Annex.Transfer + +import qualified Data.Set as S + +cmd :: Command +cmd = noCommit $ noMessages $ command "inprogress" SectionQuery + "access files while they're being downloaded" + paramPaths (seek <$$> optParser) + +data InprogressOptions = InprogressOptions + { inprogressFiles :: CmdParams + , allOption :: Bool + } + +optParser :: CmdParamsDesc -> Parser InprogressOptions +optParser desc = InprogressOptions + <$> cmdParams desc + <*> switch + ( long "all" + <> short 'A' + <> help "access all files currently being downloaded" + ) + +seek :: InprogressOptions -> CommandSeek +seek o = do + ts <- map (transferKey . fst) <$> getTransfers + if allOption o + then forM_ ts $ commandAction . start' + else do + let s = S.fromList ts + withFilesInGit (whenAnnexed (start s)) + =<< workTreeItems (inprogressFiles o) + +start :: S.Set Key -> FilePath -> Key -> CommandStart +start s _file k + | S.member k s = start' k + | otherwise = notInprogress + +start' :: Key -> CommandStart +start' k = do + tmpf <- fromRepo $ gitAnnexTmpObjectLocation k + ifM (liftIO $ doesFileExist tmpf) + ( next $ next $ do + liftIO $ putStrLn tmpf + return True + , notInprogress + ) + +notInprogress :: CommandStart +notInprogress = next stop |