addurl, get: Added --json-progress option, which adds progress objects to the json output.

This doesn't work right when used with -J yet, and there is some really
ugly hand-crafting of part of the json output.
This commit is contained in:
Joey Hess 2016-09-09 15:06:54 -04:00
parent f421a7f001
commit 05d4438383
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
12 changed files with 55 additions and 12 deletions

View file

@ -13,6 +13,7 @@ module Messages.JSON (
note,
add,
complete,
progress,
DualDisp(..),
ObjectMap(..),
JSONActionItem(..),
@ -30,6 +31,8 @@ import Prelude
import qualified Utility.JSONStream as Stream
import Types.Key
import Utility.Metered
import Utility.Percentage
start :: String -> Maybe FilePath -> Maybe Key -> IO ()
start command file key = B.hPut stdout $ Stream.start $ Stream.AesonObject o
@ -53,6 +56,20 @@ add = B.hPut stdout . Stream.add
complete :: Stream.JSONChunk a -> IO ()
complete v = B.hPut stdout $ Stream.start v `B.append` Stream.end
progress :: IO () -> Integer -> BytesProcessed -> IO ()
progress jsonbuffer size bytesprocessed = do
B.hPut stdout $ Stream.start $ Stream.AesonObject o
putStr ",\"action\":"
jsonbuffer
B.hPut stdout $ Stream.end
B.hPut stdout $ Stream.end
where
n = fromBytesProcessed bytesprocessed :: Integer
Object o = object
[ "byte-progress" .= n
, "percent-progress" .= showPercentage 2 (percentage size n)
]
-- A value that can be displayed either normally, or as JSON.
data DualDisp = DualDisp
{ dispNormal :: String