diff options
author | Joey Hess <joeyh@joeyh.name> | 2014-12-11 16:43:46 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2014-12-11 16:43:46 -0400 |
commit | 5fa139a8c3f2479fcb3d194b34bca472f343c35d (patch) | |
tree | e4eed62fad9731626b89b44dd5b2e07a72af5b9a /Command/AddUrl.hs | |
parent | f76ea194616f8df1d630abc129613cd5b4e8fc2f (diff) |
importfeed: Support for downloading urls claimed by remotes
Diffstat (limited to 'Command/AddUrl.hs')
-rw-r--r-- | Command/AddUrl.hs | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs index ebfd86065..5e6ebff3c 100644 --- a/Command/AddUrl.hs +++ b/Command/AddUrl.hs @@ -73,17 +73,17 @@ seek us = do next $ next $ return False Right (UrlContents sz mf) -> do void $ commandAction $ - startRemote r relaxed (fromMaybe deffile mf) pathdepth u sz + startRemote r relaxed (fromMaybe deffile mf) u sz Right (UrlMulti l) -> forM_ l $ \(u', sz, f) -> void $ commandAction $ - startRemote r relaxed (deffile </> f) pathdepth u' sz + startRemote r relaxed (deffile </> f) u' sz -startRemote :: Remote -> Bool -> FilePath -> Maybe Int -> String -> Maybe Integer -> CommandStart -startRemote r relaxed file pathdepth s sz = do +startRemote :: Remote -> Bool -> FilePath -> URLString -> Maybe Integer -> CommandStart +startRemote r relaxed file uri sz = do showStart "addurl" file showNote $ "using " ++ Remote.name r - next $ performRemote r relaxed s file sz + next $ performRemote r relaxed uri file sz performRemote :: Remote -> Bool -> URLString -> FilePath -> Maybe Integer -> CommandPerform performRemote r relaxed uri file sz = ifAnnexed file adduri geturi @@ -93,24 +93,28 @@ performRemote r relaxed uri file sz = ifAnnexed file adduri geturi checkexistssize key = return $ case sz of Nothing -> (True, True) Just n -> (True, n == fromMaybe n (keySize key)) - geturi = do - urlkey <- Backend.URL.fromUrl uri sz - liftIO $ createDirectoryIfMissing True (parentDir file) - next $ ifM (Annex.getState Annex.fast <||> pure relaxed) - ( do - cleanup (Remote.uuid r) loguri file urlkey Nothing - return True - , do - -- Set temporary url for the urlkey - -- so that the remote knows what url it - -- should use to download it. - setTempUrl urlkey uri - let downloader = Remote.retrieveKeyFile r urlkey (Just file) - ok <- isJust <$> - downloadWith downloader urlkey (Remote.uuid r) loguri file - removeTempUrl urlkey - return ok - ) + geturi = next $ isJust <$> downloadRemoteFile r relaxed uri file sz + +downloadRemoteFile :: Remote -> Bool -> URLString -> FilePath -> Maybe Integer -> Annex (Maybe Key) +downloadRemoteFile r relaxed uri file sz = do + urlkey <- Backend.URL.fromUrl uri sz + liftIO $ createDirectoryIfMissing True (parentDir file) + ifM (Annex.getState Annex.fast <||> pure relaxed) + ( do + cleanup (Remote.uuid r) loguri file urlkey Nothing + return (Just urlkey) + , do + -- Set temporary url for the urlkey + -- so that the remote knows what url it + -- should use to download it. + setTempUrl urlkey uri + let downloader = Remote.retrieveKeyFile r urlkey (Just file) + ret <- downloadWith downloader urlkey (Remote.uuid r) loguri file + removeTempUrl urlkey + return ret + ) + where + loguri = setDownloader uri OtherDownloader startWeb :: Bool -> Maybe FilePath -> Maybe Int -> String -> CommandStart startWeb relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI s |