progress bars for glacier downloads
This commit is contained in:
parent
606c210378
commit
fb19d56476
2 changed files with 37 additions and 28 deletions
|
@ -7,7 +7,6 @@
|
|||
|
||||
module Remote.Glacier (remote) where
|
||||
|
||||
import qualified Data.ByteString.Lazy.Char8 as L
|
||||
import qualified Data.Map as M
|
||||
import System.Environment
|
||||
|
||||
|
@ -22,7 +21,6 @@ import qualified Remote.Helper.AWS as AWS
|
|||
import Crypto
|
||||
import Creds
|
||||
import Meters
|
||||
import Annex.Content
|
||||
import qualified Annex
|
||||
|
||||
import System.Process
|
||||
|
@ -100,6 +98,20 @@ storeEncrypted r (cipher, enck) k m = do
|
|||
encrypt cipher (feedFile f)
|
||||
(readBytes $ meteredWrite meterupdate h)
|
||||
|
||||
retrieve :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool
|
||||
retrieve r k _f d = metered Nothing k $ \meterupdate ->
|
||||
retrieveHelper r k $
|
||||
readBytes $ meteredWriteFile meterupdate d
|
||||
|
||||
retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
|
||||
retrieveCheap _ _ _ = return False
|
||||
|
||||
retrieveEncrypted :: Remote -> (Cipher, Key) -> Key -> FilePath -> Annex Bool
|
||||
retrieveEncrypted r (cipher, enck) k d = metered Nothing k $ \meterupdate ->
|
||||
retrieveHelper r enck $ readBytes $ \b ->
|
||||
decrypt cipher (feedBytes b) $
|
||||
readBytes $ meteredWriteFile meterupdate d
|
||||
|
||||
storeHelper :: Remote -> Key -> (Handle -> IO ()) -> Annex Bool
|
||||
storeHelper r k feeder = go =<< glacierEnv c u
|
||||
where
|
||||
|
@ -121,36 +133,33 @@ storeHelper r k feeder = go =<< glacierEnv c u
|
|||
feeder h
|
||||
return True
|
||||
|
||||
retrieve :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool
|
||||
retrieve r k _f d = retrieveHelper r k d
|
||||
|
||||
retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
|
||||
retrieveCheap _ _ _ = return False
|
||||
|
||||
retrieveEncrypted :: Remote -> (Cipher, Key) -> Key -> FilePath -> Annex Bool
|
||||
retrieveEncrypted r (cipher, enck) _k d = do
|
||||
withTmp enck $ \tmp -> do
|
||||
ok <- retrieveHelper r enck tmp
|
||||
if ok
|
||||
then liftIO $ decrypt cipher (feedFile tmp) $
|
||||
readBytes $ \content -> do
|
||||
L.writeFile d content
|
||||
return True
|
||||
else return False
|
||||
|
||||
retrieveHelper :: Remote -> Key -> FilePath -> Annex Bool
|
||||
retrieveHelper r k file = do
|
||||
showOutput
|
||||
ok <- glacierAction r
|
||||
retrieveHelper :: Remote -> Key -> (Handle -> IO ()) -> Annex Bool
|
||||
retrieveHelper r k reader = go =<< glacierEnv c u
|
||||
where
|
||||
c = fromJust $ config r
|
||||
u = uuid r
|
||||
params = glacierParams c
|
||||
[ Param "archive"
|
||||
, Param "retrieve"
|
||||
, Param "-o", File file
|
||||
, Param "-o-"
|
||||
, Param $ remoteVault r
|
||||
, Param $ archive r k
|
||||
]
|
||||
unless ok $
|
||||
showLongNote "Recommend you wait up to 4 hours, and then run this command again."
|
||||
return ok
|
||||
go Nothing = return False
|
||||
go (Just e) = do
|
||||
showOutput
|
||||
let p = (proc "glacier" (toCommand params)) { env = Just e }
|
||||
ok <- liftIO $ catchBoolIO $
|
||||
withHandle StdoutHandle createProcessSuccess p $ \h ->
|
||||
ifM (hIsEOF h)
|
||||
( return False
|
||||
, do
|
||||
reader h
|
||||
return True
|
||||
)
|
||||
unless ok later
|
||||
return ok
|
||||
later = showLongNote "Recommend you wait up to 4 hours, and then run this command again."
|
||||
|
||||
remove :: Remote -> Key -> Annex Bool
|
||||
remove r k = glacierAction r
|
||||
|
|
|
@ -24,7 +24,7 @@ the MeterUpdate callback as the upload progresses.
|
|||
* web: Not applicable; does not upload
|
||||
* webdav: **done**
|
||||
* S3: **done**
|
||||
* glacier: TODO (may be able to pipe to/from glacier-cli using "-")
|
||||
* glacier: **done**
|
||||
* bup: TODO
|
||||
* hook: Would require the hook interface to somehow do this, which seems
|
||||
too complicated. So skipping.
|
||||
|
|
Loading…
Add table
Reference in a new issue